我想使用Java Spark根据它们的键比较两个JavaPairRDD,比较它们的值以查看相同的键是否具有完全相同的值。
现在,我只是检查了交集和联合的count(),但这还不够,如下所示:
JavaPairRDD<String, String> intersectionJavaPairRDD = hBaseJavaPairRDD.intersection(hiveJavaPairRDD);
JavaPairRDD<String, String> unionJavaPairRDD = hBaseJavaPairRDD.union(hiveJavaPairRDD).distinct();
if (intersectionJavaPairRDD.count() != unionJavaPairRDD.count()
|| hiveJavaPairRDD.count() != hBaseJavaPairRDD.count()) {
System.err.println(
"ERROR: SxS validation failed...");
System.exit(-1);
}
如果每个值具有相同的密钥,我如何比较它们?
非常感谢!
答案 0 :(得分:1)
我来自scala,但我相信通过一些语法更改,它也适用于java。
我的想法是加入两个RDD
,然后比较两列值。
val isEquals = hBaseJavaPairRDD
.join(hiveJavaPairRDD)
.map {
case (id, (v1, v2)) => v1 == v2
}
.reduce(_ && _)
此解决方案背后的理念如下:
RDD
的值放在同一行中。这是通过join
操作执行的。RDD
),以便对于每行我们true
如果两个值等于false
,则reduce
上应用RDD
函数,并将 AND 作为元素之间的二元操作。如果加入reduce
中的所有元素都是true
,那么应用RDD
函数会返回true
,即所有值都是等于,否则为false
。
很抱歉在scala中回答,希望有所帮助