如何在Pyspark DataFrame中查找同一行内的重复值
实现代码
首先导入依赖函数:
from pyspark.sql import functions as F
如果需要构造示例测试数据,可以用如下代码:
data = [ (1, 0, 1), (4, 0, 4), (3, 3, 4), (4, 2, 2) ] df = spark.createDataFrame(data, schema=["val1", "val2", "val3"])
核心逻辑:新增dup列,筛选每行中出现次数≥2的元素:
df = df.withColumn("dup", F.expr(""" filter( array(val1, val2, val3), x -> size(filter(array(val1, val2, val3), y -> y = x)) >= 2 )[0] """))
执行df.show()即可得到目标结果:
+----+----+----+---+ |val1|val2|val3|dup| +----+----+----+---+ | 1| 0| 1| 1| | 4| 0| 4| 4| | 3| 3| 4| 3| | 4| 2| 2| 2| +----+----+----+---+
逻辑说明
- 先把每行的
val1、val2、val3三个字段拼接为一个数组 - 遍历数组中的每个元素,统计该元素在当前行数组中出现的次数
- 筛选出出现次数≥2的元素,取第一个作为
dup列的取值
如果你的场景中存在同一行有多个不同重复值的情况,可以调整输出规则,比如把所有重复值拼接为数组返回即可。
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

