有没有一种方法可以根据密钥比较 2 对RDDs
的值。
例如:
RDD1: RDD[(Int, String)] = {(1, "ABC"), (2, "XYZ"), (3, "PQR")}
RDD2: RDD[(Int, String)] = {(5, "AAA"), (2, "XYZ"), (3, "LMN")}
我的任务是获取值均不同的两个rdds
中存在的键数。
联接为rdd
提供了键2
和3
。但我希望最终输出为3
因为值不同。
我尝试了以下方法:
var diff = rdd1.join(rdd2).map{case(k,(s1,s2))=> if (s1!=s2) (k,s1)}
这样我就可以计算出差异。但是它同时提供了键2
和3
。我想我需要其他条件来跳过匹配值。
有人可以建议我如何达到期望的结果吗? (或使用任何其他方法)。
2 回答
使用
collect
,它接受部分函数并删除未定义该部分函数的值。然后,在 case 语句中包括“ if”作为保护,而不是 case 结果表达式的一部分:这样,就不会在
s1 == s2
处定义部分函数,这会使collect
过滤掉它们。等效的解决方案(但不太优雅)将仅使用
map
和filter
-map
始终返回与输入相同的记录数:使用
leftInnerJoin
到第一个 rdd 中存在密钥的位置并依靠它。