dataframe - Pyspark 收集列表

标签 dataframe apache-spark pyspark

我正在对 pyspark 数据框中的一列进行分组,并在另一列上进行收集列表以获取 column_1 的所有可用值。如下图。

Column_1 Column_2
A        Name1
A        Name2
A        Name3
B        Name1
B        Name2
C        Name1
D        Name1
D        Name1
D        Name1
D        Name1

我得到的输出是 column_2 和 column_1 分组的收集列表。

Column_1 Column_2
A        [Name1,Name2,Name3]  
B        [Name1,Name2]
C        [Name1]
D        [Name1,Name1,Name1,Name1]

现在,当收集列表中的所有值都相同时,我只想显示一次而不是四次。以下是预期的输出。

预期输出:

Column_1 Column_2
A        [Name1,Name2,Name3]  
B        [Name1,Name2]
C        [Name1]
D        [Name1]

有没有办法在 pyspark 中做到这一点?

最佳答案

使用collect_set 来消除重复项并使用array_sort(来自 Spark-2.4.0)对数组进行排序。

  • (或)使用 array_distinct(来自 Spark-2.4.0)从 collect_list 中消除重复项。

df.show()
#+--------+--------+
#|Column_1|Column_2|
#+--------+--------+
#|       A|   Name1|
#|       A|   Name2|
#|       A|   Name3|
#|       B|   Name1|
#|       B|   Name2|
#|       C|   Name1|
#|       D|   Name1|
#|       D|   Name1|
#+--------+--------+

from pyspark.sql.functions import *    
df.groupBy('Column_1').agg(array_sort(collect_set(col('Column_2'))).alias("Column_2")).orderBy("Column_1").show(10,False)

#using array_distinct,array_sort functions   
df.groupBy('Column_1').agg(array_sort(array_distinct(collect_list(col('Column_2')))).alias("Column_2")).orderBy("Column_1").show(10,False)
#+--------+---------------------+
#|Column_1|Column_2             |
#+--------+---------------------+
#|A       |[Name1, Name2, Name3]|
#|B       |[Name1, Name2]       |
#|C       |[Name1]              |
#|D       |[Name1]              |
#+--------+---------------------+

关于dataframe - Pyspark 收集列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62642113/

相关文章:

python - Pandas 数据框 : select multiple rows based on entries in other rows

python - 使用列表加一些字符串从数据框中选择列

python - Spark可调参数特别是执行程序内存

python - 如何格式化pyspark中的数字列?

python - 如何在 Pyspark 的 lambda 函数中附加 Dataframe 的特定列?

dataframe - 在pyspark中的数据帧上应用udf后出现错误

pyspark - 在pyspark中组合来自多行的文本

r - 按组总结应用涉及下一组的功能

python - Pandas :合并两个名称不同的列?

scala - 动态构建 Spark SQL 查询