У меня есть следующая таблица:
df = spark.createDataFrame([(2,'john',1),
(2,'john',1),
(3,'pete',8),
(3,'pete',8),
(5,'steve',9)],
['id','name','value'])
df.show()
+----+-------+-------+--------------+
| id | name | value | date |
+----+-------+-------+--------------+
| 2 | john | 1 | 131434234342 |
| 2 | john | 1 | 10-22-2018 |
| 3 | pete | 8 | 10-22-2018 |
| 3 | pete | 8 | 3258958304 |
| 5 | steve | 9 | 124324234 |
+----+-------+-------+--------------+
Я хочу удалить все повторяющиеся пары (когда дубликаты встречаются в id, name или value, но NOT date), поэтому я получаю:
+----+-------+-------+-----------+
| id | name | value | date |
+----+-------+-------+-----------+
| 5 | steve | 9 | 124324234 |
+----+-------+-------+-----------+
Как я могу это сделать в PySpark?
Вы можете groupBy id
, name
и value
и фильтр в столбце count
::
df = df.groupBy('id','name','value').count().where('count = 1')
df.show()
+---+-----+-----+-----+
| id| name|value|count|
+---+-----+-----+-----+
| 5|steve| 9| 1|
+---+-----+-----+-----+
Вы могли бы в конечном итоге отказаться от count
столбца, если это необходимо
Сделайте groupBy
для столбцов, которые вы хотите, и count
и сделайте фильтр, где count
равно 1
а затем вы можете сбросить столбец count
как показано ниже.
import pyspark.sql.functions as f
df = df.groupBy("id", "name", "value").agg(f.count("*").alias('cnt')).where('cnt = 1').drop('cnt')
Вы можете добавить столбец date
в условии GroupBy
если хотите
Надеюсь, это поможет вам
Window
поэтому все столбцы будут сохранены.