pyspark根据列值删除重复行

2024-09-27 07:30:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pypark RDD。我希望仅当“column 1”和“column 2”在下一行中匹配时消除重复。数据如下所示:

2,10482422,0.18
2,10482422,0.4
2,10482423,0.15
2,10482423,0.43
2,10482424,0.18
2,10482424,0.49
2,10482425,0.21
2,10482425,0.52
2,10482426,0.27
2,10482426,0.64
2,10482427,0.73

在上面的示例中,我只希望通过删除其他重复行来为每一行添加一个最大值column three

预期产量为:

^{pr2}$

我尝试创建一个数据帧并使用df.dropDuplicates(),但它没有给出预期的答案。如何根据两列来保持RDD中的最大值?在

这是一个350 GB的RDD,任何优化建议都将是伟大的。在


Tags: 数据答案示例dfcolumn建议three产量
2条回答

我想reduceByKey会有帮助的。在

请记住,当使用reduceByKey或任何其他“按键”转换或操作时,可以将键定义为元组。在

rdd = sc.parallelize([(2,10482422,0.18),
(2,10482422,0.4),
(2,10482423,0.15),
(2,10482423,0.43),
(2,10482424,0.18),
(2,10482424,0.49),
(2,10482425,0.21),
(2,10482425,0.52),
(2,10482426,0.27),
(2,10482426,0.64),
(2,10482427,0.73)])

print rdd.map(lambda x: ((x[0], x[1]), x[2]))\
.reduceByKey(lambda x, y: x if x >= y else y)\
.collect()

结果:

^{pr2}$

您的回答并非100%明确您是否要使用数据帧,但如果您愿意从您的RDD创建DF,那么您也可以使用以下方法:

from pyspark.sql import functions as f
df.groupby('column1', 'column2')
  .agg(f.max(f.col('value').alias('maxval'))

相关问题 更多 >

    热门问题