【发布时间】:2018-12-08 04:25:04
【问题描述】:
我有两个完全相同的数据框用于比较测试
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 上的这两个 dfs 进行比较,如果计数不匹配,则打印出一些消息,说明它不匹配。 这是我的尝试
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和count 4 cols与count2进行比较,显然count3和count 4不匹配count 2,所以我希望结果是
-----------------------------------------------
year | state | count2 | count3 | count4 |
2014 | NJ | 12332 | mismatch | mismatch |
谢谢!
【问题讨论】:
-
好收获!!我错过了那些
-
谢谢拉梅什,我已经更新了问题并添加了一个新场景..
-
我不知道你在问什么
-
我要问的是如何将 df1 的第一行与 df2 的第一行连接起来?
标签: scala amazon-web-services apache-spark hadoop bigdata