当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark SQL Functions collect_list方法用法及代码示例


PySpark SQL 函数的 collect_list(~) 方法返回列中的值列表。与 collect_set(~) 不同,返回的列表可以包含重复值。空值将被忽略。

参数

1.col | stringColumn 对象

列标签或 Column 对象。

返回值

PySpark SQL Column 对象 ( pyspark.sql.column.Column )。

警告

假设返回列表的顺序可能是随机的,因为顺序受洗牌操作影响。

例子

考虑以下PySpark DataFrame:

data = [("Alex", "A"), ("Alex", "B"), ("Bob", "A"), ("Cathy", "C"), ("Dave", None)]
df = spark.createDataFrame(data, ["name", "group"])
df.show()



+-----+-----+
| name|group|
+-----+-----+
| Alex|    A|
| Alex|    B|
|  Bob|    A|
|Cathy|    C|
| Dave| null|
+-----+-----+

获取 PySpark 中的列值列表

要获取 group 列中的值列表:

import pyspark.sql.functions as F
df.select(F.collect_list("group")).show()



+-------------------+
|collect_list(group)|
+-------------------+
|       [A, B, A, C]|
+-------------------+

请注意以下事项:

  • 我们有重复的值(A)。

  • 空值将被忽略。

同样,您也可以将 Column 对象传递给 collect_list(~)

import pyspark.sql.functions as F
df.select(F.collect_list(df.group)).show()



+-------------------+
|collect_list(group)|
+-------------------+
|       [A, B, A, C]|
+-------------------+
获取标准清单

要获取标准列表:

list_rows = df.select(F.collect_list(df.group)).collect()
list_rows[0][0]



['A', 'B', 'A', 'C']

此处, collect() 方法将 select(~) 返回的 PySpark DataFrame 的内容作为 Row 对象的列表返回。该列表的长度保证为 1,因为 collect_list(~) 将值收集到单个列表中。最后,我们使用 [0] 访问 Row 对象的内容。

获取 PySpark 中每个组的列值列表

方法 collect_list(~) 通常在聚合上下文中使用。考虑与上面相同的 PySpark DataFrame:

df.show()



+-----+-----+
| name|group|
+-----+-----+
| Alex|    A|
| Alex|    B|
|  Bob|    A|
|Cathy|    C|
| Dave| null|
+-----+-----+

要将 group 列展平为每个 name 的单个列表:

import pyspark.sql.functions as F
df.groupby("name").agg(F.collect_list("group")).show()



+-----+-------------------+
| name|collect_list(group)|
+-----+-------------------+
| Alex|             [A, B]|
|  Bob|                [A]|
|Cathy|                [C]|
| Dave|                 []|
+-----+-------------------+

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark SQL Functions | collect_list method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。