我在pysparkDataframe中的一列上执行group by,并在另一列上执行collect list,以获取列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
我得到的输出是列2的collect列表,列1已分组。
Column_1 Column_2
A [Name1,Name2,Name3]
B [Name1,Name2]
C [Name1]
D [Name1,Name1,Name1,Name1]
当collect列表中的所有值都相同时,我只想显示一次,而不是四次。下面是预期输出。
预期产量:
Column_1 Column_2
A [Name1,Name2,Name3]
B [Name1,Name2]
C [Name1]
D [Name1]
有没有办法在Pypark中做到这一点?
2条答案
按热度按时间yqlxgs2m1#
使用
collect_set
消除重复并使用array_sort
(来自spark-2.4.0)对数组进行排序。(或)使用
array_distinct
(来自spark-2.4.0)以从collect\u列表中消除重复项。wb1gzix02#
除了我上面的评论之外,如果顺序与发生顺序有关(请检查输入df):
您可以首先分配索引和“删除重复项+收集”列表: