gpt4 book ai didi

dataframe - Pyspark 收集列表

转载 作者:行者123 更新时间:2023-12-05 01:11:45 25 4
gpt4 key购买 nike

我正在对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com