Pyspark 中的去重问题
Deduplication problems in Pyspark
我有一个包含多行 ID、日期和其他信息的数据框。它包含 2,856,134 条记录。 ID 不同的计数导致 1,552,184 条记录。
使用这个:
DF2 = sorted(DF.groupBy(DF.id).max('date').alias('date').collect())
给我每个 ID 的最大日期,并得到 1,552,184 条记录,这与上面的相符。到目前为止一切顺利。
我尝试将 DF2 加入 DF,其中 id = id 和 max_date = date:
df3 = DF2.join(DF,(DF2.id==DF.id)&(DF2.Max_date==DF.date),"left")
这导致 2,358,316 条记录 - 这与原始数量不同。
我将代码更改为:
df3 = DF2.join(DF,(DF2.id==DF.id)&(DF2.Max_date==DF.date),"left").dropDuplicates()
这导致 1,552,508 条记录(这很奇怪,因为它应该 return 1,552,184 来自去重复的 DF2以上。
知道这里发生了什么吗?我认为这与我的连接功能有关。
谢谢!
这是因为您的 table 2 有重复的条目,例如:
Table1 Table2
_______ _________
1 2
2 2
3 5
4 6
SELECT Table1.Id, Table2.Id FROM Table1 LEFT OUTER JOIN Table2 ON Table1.Id=Table2.Id
结果:
1,null
2,2
2,2
3,null
4,null
希望本文能帮助您解决问题
我有一个包含多行 ID、日期和其他信息的数据框。它包含 2,856,134 条记录。 ID 不同的计数导致 1,552,184 条记录。
使用这个:
DF2 = sorted(DF.groupBy(DF.id).max('date').alias('date').collect())
给我每个 ID 的最大日期,并得到 1,552,184 条记录,这与上面的相符。到目前为止一切顺利。
我尝试将 DF2 加入 DF,其中 id = id 和 max_date = date:
df3 = DF2.join(DF,(DF2.id==DF.id)&(DF2.Max_date==DF.date),"left")
这导致 2,358,316 条记录 - 这与原始数量不同。
我将代码更改为:
df3 = DF2.join(DF,(DF2.id==DF.id)&(DF2.Max_date==DF.date),"left").dropDuplicates()
这导致 1,552,508 条记录(这很奇怪,因为它应该 return 1,552,184 来自去重复的 DF2以上。
知道这里发生了什么吗?我认为这与我的连接功能有关。
谢谢!
这是因为您的 table 2 有重复的条目,例如:
Table1 Table2
_______ _________
1 2
2 2
3 5
4 6
SELECT Table1.Id, Table2.Id FROM Table1 LEFT OUTER JOIN Table2 ON Table1.Id=Table2.Id
结果:
1,null
2,2
2,2
3,null
4,null
希望本文能帮助您解决问题