使用 Spark 2.2 Java 1.8
我需要收集数组列的集合。但它给了我 WrappedArray。请参阅下文。
Dataset<Row> df2 = df.groupBy("id").agg(collect_list("values"))
df2.show(truncate=False)
# +-----+----------------------------------------------+
# |id| collect_list(values) |
# +-----+----------------------------------------------+
# |1 |[WrappedArray(1, 2, 3), WrappedArray(4, 5, 6)]|
# |2 |[WrappedArray(2), WrappedArray(3)] |
# +-----+----------------------------------------------+
Expected output : =
# +-----+------------------+
# |store| values |
# +-----+------------------+
# |1 |[1, 2, 3, 4, 5, 6]|
# |2 |[2, 3] |
# +-----+------------------+
如何在 Spark java 中实现上述输出。有人可以帮忙吗?谢谢。
最佳答案
这是使用 UDF 的 scala 等效项(不是 java Guy):
//df.show(false)
+-----+----------------------------------------------+
|store|values |
+-----+----------------------------------------------+
|1 |[WrappedArray(1, 2, 3), WrappedArray(4, 5, 6)]|
|2 |[WrappedArray(2), WrappedArray(3)] |
+-----+----------------------------------------------+
import org.apache.spark.sql._
import org.apache.spark.sql.functions._
val flattenWrappedArray = udf((value: Seq[Seq[Int]]) => {value.flatten})
df.withColumn("values_new",flattenWrappedArray($"values")).show(false)
输出:
+-----+----------------------------------------------+-------------+
|store|values |values_new |
+-----+----------------------------------------------+-------------+
|1 |[WrappedArray(1, 2, 3), WrappedArray(4, 5, 6)]|[1,2,3,4,5,6]|
|2 |[WrappedArray(2), WrappedArray(3)] |[2,3] |
+-----+----------------------------------------------+-------------+
希望这有帮助!
关于java - 如何在java中展平spark数据集中的包装数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52258050/