我有一个 spark 数据集的列(在 java 中),我希望该列的所有值成为新列的列名(新列可以用常量值填充)。
For example I have:
+------------+
| Column |
+------------+
| a |
| b |
| c |
+------------+
And I want:
+------+----+----+---+
|Column| a | b | c |
+------+----+----+---+
| a | 0 | 0 |0 |
| b | 0 | 0 |0 |
| c | 0 | 0 |0 |
+------+----+----+---+
我试过的是:
public class test{
static SparkSession spark = SparkSession.builder().appName("Java")
.config("spark.master", "local").getOrCreate();
static Dataset<Row> dataset = spark.emptyDataFrame();
public Dataset<Row> test(Dataset<Row> ds, SparkSession spark) {
SQLContext sqlContext = new SQLContext(spark);
sqlContext.udf().register("add", add, DataTypes.createArrayType(DataTypes.StringType));
ds = ds.withColumn("substrings", functions.callUDF("add", ds.col("Column")));
return ds;
}
private static UDF1 addSubstrings = new UDF1<String, String[]>() {
public String[] call(String str) throws Exception {
dataset = dataset.withColumn(str, functions.lit(0));
String[] a = {"placeholder"};
return a;
}
};
}
我的问题是,有时我得到正确的结果,有时却没有(未添加列)。我真的不明白为什么。我正在寻找一种将数据集传递给 UDF 的方法,但我不知道该怎么做。
目前我正在通过使用列的 collectAsList() 来解决它,然后迭代 Arraylist 从而添加新列。但这真的很低效,因为我的数据太多了。
动漫人物
慕桂英546537
蓝山帝景
相关分类