當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。