gpt4 book ai didi

apache-spark - 根据 RDD/Spark DataFrame 中的特定列从行中删除重复项

转载 作者:行者123 更新时间:2023-12-03 05:56:00 26 4
gpt4 key购买 nike

假设我有一个相当大的数据集,其形式如下:

data = sc.parallelize([('Foo',41,'US',3),
('Foo',39,'UK',1),
('Bar',57,'CA',2),
('Bar',72,'CA',2),
('Baz',22,'US',6),
('Baz',36,'US',6)])

我想要做的是仅根据第一列、第三列和第四列的值删除重复行。

删除完全重复的行很简单:

data = data.distinct()

第 5 行或第 6 行将被删除

但是如何仅删除基于第 1、3 和 4 列的重复行?即删除其中之一:

('Baz',22,'US',6)
('Baz',36,'US',6)

在 Python 中,这可以通过使用 .drop_duplicates() 指定列来完成。如何在 Spark/Pyspark 中实现相同的目标?

最佳答案

Pyspark 确实包含一个 dropDuplicates() 方法,该方法是在 1.4 中引入的。 https://spark.apache.org/docs/3.1.2/api/python/reference/api/pyspark.sql.DataFrame.dropDuplicates.html

>>> from pyspark.sql import Row
>>> df = sc.parallelize([ \
... Row(name='Alice', age=5, height=80), \
... Row(name='Alice', age=5, height=80), \
... Row(name='Alice', age=10, height=80)]).toDF()
>>> df.dropDuplicates().show()
+---+------+-----+
|age|height| name|
+---+------+-----+
| 5| 80|Alice|
| 10| 80|Alice|
+---+------+-----+

>>> df.dropDuplicates(['name', 'height']).show()
+---+------+-----+
|age|height| name|
+---+------+-----+
| 5| 80|Alice|
+---+------+-----+

关于apache-spark - 根据 RDD/Spark DataFrame 中的特定列从行中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248221/

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