当前位置: 首页 > 知识库问答 >
问题:

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

鄢松
2023-03-14

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

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()
('Baz',22,'US',6)
('Baz',36,'US',6)

在Python中,这可以通过使用.drop_duplicates()指定列来实现。如何在Spark/PySpark中实现相同的功能?

共有1个答案

唐运诚
2023-03-14

Pyspark确实包含dropduplicates()方法,该方法在1.4中引入。https://spark.apache.org/docs/latest/api/python/pyspark.sql.sql.html#pyspark.sql.dataframe.dropduplicates

>>> 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|
+---+------+-----+
 类似资料:
  • 我有一个包含大量列的Spark数据框架。我想从中删除两列以获得新的数据帧。 如果列更少,我可以在API中使用select方法,如下所示: 但是既然从长列表中挑选列是一项乏味的任务,有解决方法吗?

  • 嘿嘿,我有以下数据框: 我想删除所有行,这些行的in col1值为2或smaler,因此看起来像: 我该怎么做?非常感谢。

  • 我有一个熊猫数据框,看起来像这样(但实际上要大得多): 我只想删除包含-500(2)和整列(f和g)的整行。我的数据框是自动生成的,我还不知道哪些列和行包含-500。 有人知道怎么做吗? 谢谢

  • 我有两个火花DF,我需要加入。只选择df1中存在的df2中的值,不应该有重复的行。 例如: df1: df2: 我正在做以下工作: 但是我的输出有几个重复的行。 如果val从df1中删除,我试图实现一个类似except的操作。但是除了之外,

  • 我在python中有一个非常大的数据帧,我想把所有具有特定字符串的行放到特定列中。 例如,我想删除所有在数据帧的C列中有字符串“XYZ”作为子字符串的行。 这可以通过使用有效的方式实现。drop()方法?

  • 在scala火花数据帧中是否有的替代方案。我想从火花数据帧的列中选择特定的行。例如,在R等效代码中的第100行