gpt4 book ai didi

java - 在 apache spark 中,如何在 groupBy() 之后将一列 mllib Vector 收集到列表中?

转载 作者:行者123 更新时间:2023-11-30 10:34:34 25 4
gpt4 key购买 nike

我在 Java 8 中使用 Spark。我有一个数据框,其中一列包含一个 mllib.linalg.Vector。我想将数据框中的其他列之一分组,比如 ID 列,并将特征向量“collect_list”到列表中。我收到以下错误。我不明白为什么。这是一个泛型操作,为什么要关心列中数据的类型呢?它适用于标量数字或字符串等,但似​​乎不适用于 mllib Vector。这有解决方法吗?也许是 collect_list() 以外的另一个函数?

No handler for Hive udf class org.apache.hadoop.hive.ql.udf.generic.GenericUDAFCollectList because: org.apache.spark.mllib.linalg.VectorUDT@f71b0bce (of class org.apache.spark.mllib.linalg.VectorUDT)

最佳答案

您使用的 Spark 版本是什么?对于 Spark 1.6.2,它会抛出您提到的相同错误,但这在 Spark 2.0.1 中运行良好。请参阅下面的示例代码和输出。

public class JavaVectorExample {
public static void main(String[] args) {
//SparkSession
SparkSession spark = SparkSession
.builder()
.appName("JavaVectorExample")
.master("local[2]")
.getOrCreate();
//schema
StructType schema = createStructType(new StructField[]{
createStructField("id", IntegerType, false),
createStructField("label", DoubleType, false),
createStructField("features", new VectorUDT(), false),
});
//dataset
Row row1 = RowFactory.create(0, 1.0, Vectors.dense(0.0, 10.0, 0.5));
Row row2 = RowFactory.create(1, 1.0, Vectors.dense(1.0, 10.5, 0.5));
Row row3 = RowFactory.create(0, 1.5, Vectors.dense(0.0, 10.5, 1.0));
Dataset<Row> dataset = spark.createDataFrame(Arrays.asList(row1,row2,row3), schema);
dataset.printSchema();
//groupby
dataset.groupBy(col("id")).agg(collect_list(col("features"))).show(false);
spark.stop();
}
}

这是输出。

+---+--------------------------------+
|id |collect_list(features) |
+---+--------------------------------+
|1 |[[1.0,10.5,0.5]] |
|0 |[[0.0,10.0,0.5], [0.0,10.5,1.0]]|
+---+--------------------------------+

关于java - 在 apache spark 中,如何在 groupBy() 之后将一列 mllib Vector 收集到列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41597223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com