python - Pyspark:如何删除仅几列的 dropduplicates 中的两个出现

标签 python pyspark apache-spark-sql

我为此使用 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/

相关文章:

apache-spark - 如何在转换期间测试数据类型转换

java - Apache Spark java 条件替换列

apache-spark - 如何展平结构类型数组的列(由Spark ML API返回)?

python - CentOS 5 上的 Ansible 2.4 升级和 python 2.6

python - 在 Python 中使用列表而不是字典进行优化

python - 如何将条形图值更改为百分比 (Matplotlib)

python - 查找 Google 数据存储中的最大索引(博客系统中的分页)

python - Spark Dataframe 在转换后选择列

python - 文件不存在 - Spark 提交

apache-spark - 如何在 spark 2.1.0 中提交 python 文件?