gpt4 book ai didi

java - 如何在java中展平spark数据集中的包装数组

转载 作者:行者123 更新时间:2023-12-01 06:03:09 24 4
gpt4 key购买 nike

使用 Spark 2.2Java 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/

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