【问题标题】:Converting CSV values to Vector in Spark Dataframe in Java在 Java 中的 Spark Dataframe 中将 CSV 值转换为 Vector
【发布时间】:2018-08-26 02:06:53
【问题描述】:

我有一个包含两列的 CSV 文件

id, features

id 列是一个字符串,而 features 列是机器学习算法的特征值的逗号分隔列表,即。 "[1,4,5]" 我基本上只需要在值上调用 Vectors.parse() 就可以得到一个向量,但我不想先转换为 RDD。

我想把它放到一个 Spark Dataframe 中,其中 features 列是 org.apache.spark.mllib.linalg.Vector

我正在使用 databricks csv api 将其读入数据框,并尝试将 features 列转换为 Vector。

有谁知道如何在 Java 中做到这一点?

【问题讨论】:

    标签: java hadoop apache-spark dataframe vector


    【解决方案1】:

    我找到了一种使用 UDF 的方法。有没有其他方法可以做到这一点?

      HashMap<String, String> options = new HashMap<String, String>();
      options.put("header", "true");
      String input= args[0];
    
      sqlc.udf().register("toVector", new UDF1<String, Vector>() {
         @Override
         public Vector call(String t1) throws Exception {
            return Vectors.parse(t1);
         }
      }, new VectorUDT());
    
      StructField[] fields = {new StructField("id",DataTypes.StringType,false, Metadata.empty()) , new StructField("features", DataTypes.StringType, false, Metadata.empty())};
      StructType schema = new StructType(fields);
    
      DataFrame df = sqlc.read().format("com.databricks.spark.csv").schema(schema).options(options).load(input);
    
      df = df.withColumn("features", functions.callUDF("toVector", df.col("features")));
    

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2022-01-08
      • 2017-05-09
      • 1970-01-01
      • 2018-03-23
      • 2017-03-25
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多