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

2024-01-31

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

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 列删除重复行呢? IE。删除其中之一:

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

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


PySpark does包括一个dropDuplicates() https://spark.apache.org/docs/3.1.2/api/python/reference/api/pyspark.sql.DataFrame.dropDuplicates.html方法,在1.4中介绍过。

>>> 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|
+---+------+-----+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 RDD/Spark DataFrame 中的特定列从行中删除重复项 的相关文章

随机推荐