我有下面的pysparkDataframe。
Column_1 Column_2
A Name1
A Name2
A Name3
A X
B Name1
B X
B Name2
C Name1
D Name1
D Name1
D Name1
D Name1
E X
我使用groupby聚合数据,collect set收集数据,删除重复值,并创建以下输出。
Column_1 Column_2
A [Name1,Name2,Name3,X]
B [Name1,X,Name2]
C [Name1]
D [Name1]
E [X]
但我期望的输出是每当x与其他值(如name1、name2等)一起出现时,它必须从输出集中删除(行a、b)。但是,每当它是行的唯一值时,就必须像行e一样保留它。
预期产量:
Column_1 Column_2
A [Name1,Name2,Name3]
B [Name1,Name2]
C [Name1]
D [Name1]
E [X]
有没有办法在Pypark中实现这一点?
1条答案
按热度按时间eh57zj3b1#
从
Spark-2.4
你可以用array_remove
如果数组大小>1,则函数。Example:
```df.show(10,False)
+--------+------------------------+
|Column_1|Column_2 |
+--------+------------------------+
|A |[Name1, Name2, Name3, X]|
|E |[X] |
+--------+------------------------+
from pyspark.sql.functions import *
df.withColumn("Column_2",when(size(col("Column_2")) > 1 , array_remove(col("column_2"),'X')).otherwise(col("column_2"))).show(10,False)
using filter function
df.withColumn("Column_2",when(size(col("Column_2")) > 1 , expr("filter(column_2, x -> not(x <=> 'X'))")).otherwise(col("column_2"))).show(10,False)
+--------+---------------------+
|Column_1|Column_2 |
+--------+---------------------+
|A |[Name1, Name2, Name3]|
|E |[X] |
+--------+---------------------+