有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何按键比较两个JavaPairRDD并比较值?

我想使用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);
        }

当它们具有相同的键时,如何比较每个值

非常感谢


共 (1) 个答案

  1. # 1 楼答案

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

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

    val isEquals = hBaseJavaPairRDD
                  .join(hiveJavaPairRDD)
                  .map {
                    case (id, (v1, v2)) => v1 == v2
                  }
                  .reduce(_ && _)
    

    该解决方案的理念如下:

    1. 对于每个,我们将第一个和第二个RDD的值放在同一行中。这是通过join操作执行的
    2. 映射结果(连接RDD),这样对于每一行,如果两个值相等,我们就放置true,否则
    3. 然后在这个上应用reduce函数映射RDD,并将作为元素之间的二进制操作

    应用reduce函数返回true,如果连接的RDD中的所有元素都是true,即所有值都等于,否则false

    很抱歉用scala回复,希望能有所帮助