如何从 pyspark 中的列创建列表列

How to create a column of lists from a column in pyspark

我有以下 pyspark 数据框:

import pandas as pd
foo = pd.DataFrame({'id': ['a','a','a','a', 'b','b','b','b'],
                    'time': [1,2,3,4,1,2,3,5],
                    'col': ['1','2','1','2','3','2','3','2']})

foo_df = spark.createDataFrame(foo)
foo_df.show()

+---+----+---+
| id|time|col|
+---+----+---+
|  a|   1|  1|
|  a|   2|  2|
|  a|   3|  1|
|  a|   4|  2|
|  b|   1|  3|
|  b|   2|  2|
|  b|   3|  3|
|  b|   5|  2|
+---+----+---+

我希望每个 id 有 1 行,而一列将包含 list 以及来自 col 列的值。输出将如下所示:

+---+------------------+
| id|               col|
+---+------------------+
|  a| ['1','2','1','2']|
|  b| ['3','2','3','2']|
+---+------------------+

您可以在 id 列上使用 goupBy,然后在 col 列上使用 collect_list

import pyspark.sql.functions as F
list_df = foo_df.groupBy(F.col("id")).agg(F.collect_list(F.col("col")).alias("col"))
list_df.show()

输出:

+---+------------+
| id|         col|
+---+------------+
|  a|[1, 2, 1, 2]|
|  b|[3, 2, 3, 2]|
+---+------------+