按组分组并创建值列表Pyspark SQL数据框。

9

So I have a spark dataframe that looks like:

a | b | c
5 | 2 | 1
5 | 4 | 3
2 | 4 | 2
2 | 3 | 7

我希望按列 a 进行分组,从列 b 中创建值列表,并忽略 c 列。输出的数据框应该是:

a | b_list
5 | (2,4)
2 | (4,3)

我该如何使用pyspark sql dataframe完成这个任务?
谢谢! :)
1个回答

17

以下是获取该数据框的步骤。

>>> from pyspark.sql import functions as F
>>>
>>> d = [{'a': 5, 'b': 2, 'c':1}, {'a': 5, 'b': 4, 'c':3}, {'a': 2, 'b': 4, 'c':2}, {'a': 2, 'b': 3,'c':7}]
>>> df = spark.createDataFrame(d)
>>> df.show()
+---+---+---+
|  a|  b|  c|
+---+---+---+
|  5|  2|  1|
|  5|  4|  3|
|  2|  4|  2|
|  2|  3|  7|
+---+---+---+

>>> df1 = df.groupBy('a').agg(F.collect_list("b"))
>>> df1.show()
+---+---------------+
|  a|collect_list(b)|
+---+---------------+
|  5|         [2, 4]|
|  2|         [4, 3]|
+---+---------------+

@user2253546,你可以在这里阅读文档 https://spark.apache.org/docs/1.6.2/api/java/org/apache/spark/sql/functions.html,有很多有用的SQL函数。 - Thomas Decaux
在对大型数据框执行此操作时,collect_set 似乎无法获取组的正确值。我曾认为这是因为空组,但在自定义创建的组上尝试时,它并不是。有什么想法吗? - haneulkim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接