【问题标题】:How to compare two JavaPairRDD by key and compare value?如何按键比较两个JavaPairRDD并比较值?
【发布时间】:2017-05-26 23:49:56
【问题描述】:

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

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

非常感谢!

【问题讨论】:

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

标签: java apache-spark rdd


【解决方案1】:

我来自 scala,但我相信只要稍微改变一下语法,它也适用于 java。

我的想法是加入两个RDDs,然后比较两列值。

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

此解决方案背后的想法如下:

  1. 对于每个 Key,我们将第一个和第二个 RDDs 的值放在同一行中。这是通过join 操作执行的。
  2. 映射结果(joined RDD),这样对于每一行,如果两个值等于true,我们就输入false,否则
  3. 然后在这个映射的RDD 上应用reduce 函数,其中AND 作为元素之间的二元运算。

如果加入的RDD中的所有元素都是true,即所有值都等于,则

应用reduce函数返回true,@987654334 @ 否则。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多