我有两个完全相同的Dataframe进行比较测试
df1
------------------------------------------
year | state | count2 | count3 | count4|
2014 | NJ | 12332 | 54322 | 53422 |
2014 | NJ | 12332 | 53255 | 55324 |
2015 | CO | 12332 | 53255 | 55324 |
2015 | MD | 14463 | 76543 | 66433 |
2016 | CT | 14463 | 76543 | 66433 |
2016 | CT | 55325 | 76543 | 66433 |
------------------------------------------
df2
------------------------------------------
year | state | count2 | count3 | count4|
2014 | NJ | 12332 | 54322 | 53422 |
2014 | NJ | 65333 | 65555 | 125 |
2015 | CO | 12332 | 53255 | 55324 |
2015 | MD | 533 | 75 | 64524 |
2016 | CT | 14463 | 76543 | 66433 |
2016 | CT | 55325 | 76543 | 66433 |
------------------------------------------
我想与count2到count4上的这两个df进行比较,如果计数不匹配,那么打印一些消息说它不匹配。这是我的尝试
val cols = df1.columns.filter(_ != "year").toList
def mapDiffs(name: String) = when($"l.$name" === $"r.$name", null).otherwise(array($"l.$name", $"r.$name")).as(name)
val result = df1.as("l").join(df2.as("r"), "year").select($"year" :: cols.map(mapDiffs): _*)
然后和同一个州和同一个数字比较,它没有做我想做的事
------------------------------------------
year | state | count2 | count3 | count4|
2014 | NJ | 12332 | 54322 | 53422 |
2014 | NJ | no | no | no |
2015 | CO | 12332 | 53255 | 55324 |
2015 | MD | no | no | 64524 |
2016 | CT | 14463 | 76543 | 66433 |
2016 | CT | 55325 | 76543 | 66433 |
------------------------------------------
我希望结果如上所述,我如何做到这一点?
如果我只想比较一个df,col和cols,我该怎么做呢?喜欢
------------------------------------------
year | state | count2 | count3 | count4|
2014 | NJ | 12332 | 54322 | 53422 |
我想比较count3和count4列与count2,显然count3和count4与count2不匹配,所以我希望结果是
-----------------------------------------------
year | state | count2 | count3 | count4 |
2014 | NJ | 12332 | mismatch | mismatch |
谢谢您!
1条答案
按热度按时间lndjwyie1#
Dataframe
join
在year
对你的工作不起作用mapDiffs
方法。您需要在df1和df2中为join
.如果已经有一个行标识列(比如,
rowId
)在join
:现在,定义
mapDiffs
并在通过rowId
:请注意,df1和df2之间的差异似乎比df3之间的差异更多
no
-样本结果中的斑点。我修改了样本数据,使这三个点成为唯一的区别。