Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按键比较两个javapairdd并比较值?_Java_Apache Spark_Rdd - Fatal编程技术网

如何按键比较两个javapairdd并比较值?

如何按键比较两个javapairdd并比较值?,java,apache-spark,rdd,Java,Apache Spark,Rdd,我想使用JavaSpark比较两个基于键的JavaPairRDD,比较它们的值,看看同一个键是否有完全相同的值 现在,我只检查交集和并集的count(),但这还不够,如下所示: JavaPairRDD<String, String> intersectionJavaPairRDD = hBaseJavaPairRDD.intersection(hiveJavaPairRDD); JavaPairRDD<String, String> uni

我想使用JavaSpark比较两个基于键的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);
        }
javapairdd intersectionjavapairdd=hbasejavapairdd.intersection(hivejavapairdd);
javapairdd unionjavapairdd=hbasejavapairdd.union(hivejavapairdd.distinct();
if(intersectionJavaPairdd.count()!=UnionJavaPairdd.count()
||hivejavapairdd.count()!=hbasejavapairdd.count()){
System.err.println(
“错误:SxS验证失败…”);
系统退出(-1);
}
当每个值具有相同的键时,如何比较它们


非常感谢

我来自scala,但我相信只要稍作语法更改,它也可以用于java

我的想法是连接两个
RDD
s,然后比较两列值

val isEquals = hBaseJavaPairRDD
              .join(hiveJavaPairRDD)
              .map {
                case (id, (v1, v2)) => v1 == v2
              }
              .reduce(_ && _)
此解决方案背后的理念如下:

  • 对于每个我们将第一个和第二个
    RDD的值放在同一行中。这是通过
    join
    操作执行的
  • 映射结果(joined
    RDD
    ),以便对于每一行,如果两个值等于
    false
    ,则我们将
    true
  • 然后在此映射的
    RDD
    上应用
    reduce
    函数,并将作为元素之间的二进制操作
  • 如果
    reduce
    关联的
    RDD中的所有元素都是
    true
    ,则应用
    reduce
    函数返回
    true
    ,否则返回
    false


    很抱歉在scala中回答,希望它对您有所帮助

    您可以使用combineByKey/AggregateByKey来比较值。