【问题标题】: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")));