我为此使用 pysaprk:
在应用 dropduplicates 时,我想删除两次出现的匹配行。
数据集:
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| 1| A|
| 1| 1| A|
| 2| 1| C|
| 1| 2| D|
| 3| 5| E|
| 3| 5| E|
| 4| 3| G|
+----+----+----+
我需要什么:
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 2| 1| C|
| 1| 2| D|
| 4| 3| G|
+----+----+----+
我尝试使用唯一,但是,唯一适用于所有列。
diff_df = source_df.union(target_df).dropDuplicates(columns_list)
最佳答案
这不是一个优雅的方法,但提供了一个想法
>>> df = spark.createDataFrame([(1,25),(1,20),(1,20),(2,26)],['id','age'])
>>> df.show()
+---+---+
| id|age|
+---+---+
| 1| 25|
| 1| 20|
| 1| 20|
| 2| 26|
+---+---+
>>> df.groupBy([c for c in df.columns]).agg(count('id').alias('c')).show()
+---+---+---+
| id|age| c|
+---+---+---+
| 1| 25| 1|
| 1| 20| 2|
| 2| 26| 1|
+---+---+---+
>>> df.groupBy([c for c in df.columns]).agg(count('id').alias('c')).filter('c=1').show()
+---+---+---+
| id|age| c|
+---+---+---+
| 1| 25| 1|
| 2| 26| 1|
+---+---+---+
关于python - Pyspark:如何删除仅几列的 dropduplicates 中的两个出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58857277/