【发布时间】:2018-03-31 10:55:15
【问题描述】:
我有以下数据
id | value1 | value2
-----------------------
1 A red
1 B red
1 C blue
2 A blue
2 B blue
2 C green
我需要的结果是:
id | values
---------------------------------
1 [[A,red],[B,red][C,blue]]
2 [[A,blue],[B,blue][C,green]]
到目前为止,我的方法是将 value1 和 value2 分组并聚合到单独的数组中,然后将它们合并在一起,如Combine PySpark DataFrame ArrayType fields into single ArrayType field中所述
df.groupBy(["id"]).agg(*[F.collect_list("value1"), F.collect_list("value2")])
但是,由于collect_list()(请参阅here)不保证顺序,我如何确保 value1 和 value2 都匹配正确的值?
这可能会导致两个列表的顺序不同,并且随后的合并会匹配错误的值?
【问题讨论】:
-
我会在收集之前将这两个值打包在一个结构中(从 Spark 2.0 开始工作,至少在 scala api 中)
标签: python apache-spark dataframe pyspark apache-spark-sql