在pyspark中对数组类型列进行分组

时间:2018-07-16 12:08:42

标签: apache-spark pyspark

我有一个pyspark数据框列,其结构如下:

[{id:1, value:"a"},
 {id: 2, value: "b"},
 {id: 1, value: "c"}
]

我想将其转换为最佳结果,并且尽可能不使用UDF

[{id: 1, value:["a","b"]},
 {id: 2, value: "b"}
]

1 个答案:

答案 0 :(得分:0)

您可以尝试一下:

df2 = sqlContext.read.json(sc.parallelize([{'id':1, 'value':"a"},
 {'id': 2, 'value': "b"},
 {'id': 1, 'value': "c"}
]))

df2.show()
+---+-----+
| id|value|
+---+-----+
|  1|    a|
|  2|    b|
|  1|    c|
+---+-----+

您可以根据ID进行汇总,然后收集值列表。

import pyspark.sql.functions as F
df2.groupBy('id').agg(F.collect_list('value')).show()

+---+-------------------+
| id|collect_list(value)|
+---+-------------------+
|  1|             [a, c]|
|  2|                [b]|
+---+-------------------+