如果您有数据框,则可以使用 udf 来展平列表
下面是一个简单的例子
import spark.implicits._
import org.apache.spark.sql.functions._
//create a dummy data
val df = Seq(
(1, List(1,2,3)),
(1, List (5,7,9)),
(2, List(4,5,6)),
(2,List(7,8,9))
).toDF("id", "list")
val df1 = df.groupBy("id").agg(collect_set($"list").as("col1"))
df1.show(false)
df1 的输出:
+---+----------------------------------------------+
|id |col1 |
+---+----------------------------------------------+
|1 |[WrappedArray(1, 2, 3), WrappedArray(5, 7, 9)]|
|2 |[WrappedArray(7, 8, 9), WrappedArray(4, 5, 6)]|
+---+----------------------------------------------+
val testUDF = udf((list: Seq[Seq[Integer]]) => {list.flatten})
df1.withColumn("newCol", testUDF($"col1")).show(false)
输出
+---+----------------------------------------------+------------------+
|id |col1 |newCol |
+---+----------------------------------------------+------------------+
|1 |[WrappedArray(1, 2, 3), WrappedArray(5, 7, 9)]|[1, 2, 3, 5, 7, 9]|
|2 |[WrappedArray(7, 8, 9), WrappedArray(4, 5, 6)]|[7, 8, 9, 4, 5, 6]|
+---+----------------------------------------------+------------------+
我希望这会有所帮助!