我有两个输入数据帧,如下所示,我希望使用哈希方法查找重复的行
输入数据帧1:df1
|a |b |c |
|5 |2 |3 |
|1 |5 |4 |
|1 |5 |3 |
输入数据帧2:df2
|a |b |c |
|5 |2 |3 |
|5 |2 |3 |
|1 |5 |4 |
|1 |5 |3 |
准备列列表并在输入列上查找哈希
col_list = ['a', 'b', 'c']
df1 = df1.withColumn("hash", md5(concat_ws('+', *col_list)))
df2 = df2.withColumn("hash", md5(concat_ws('+', *col_list)))
upd: df1 upd: df2
|a |b |c |hash | |a |b |c |hash |
|5 |2 |3 |sfsd23| |5 |2 |3 |sfsd23|
|1 |5 |4 |fsd345| |5 |2 |3 |sfsd23|
|1 |5 |3 |54sgsr| |1 |5 |4 |fsd345|
|1 |5 |3 |54sgsr|
df_diff = df1.select(df1.hash).substract(df2.select(df2.hash))
它没有显示差异,因为散列与来自df1的散列值的1条记录相匹配,而与df2具有相同散列值的2条记录相同。 但是,如何在这之后找到问题,那么我想提出一些错误,如果我发现的话
使用
.exceptAll
(来自Spark-2.4+而不是.substract
,因为.exceptAll
通过使用df2作为源数据帧来保留所有重复的行From docs:
subtract:
exceptAll:
Example:
From Spark-2.4+:
For Spark<2.4:
我们需要在上使用Spark
window row_number functi
,然后使用left join查找重复记录Example:
相关问题 更多 >
编程相关推荐