火花reduceByKey()不拖欠最终的总和

汤米

我有一个包含一些对象计数的RDD,然后在其上应用reduceByKey(),将所有元素加起来(如单词计数示例中所示)。我已经将reduceByKey转换的输出保存到一个文本文件中,并且每个工人的总和是:

(work at  LEFT null,9741)
(work at  LEFT null,10073)
(work at  LEFT null,10348)
(work at  LEFT null,10483)
(work at  LEFT null,10754)

难道它不只是一项,而是全部的总和吗?

如果需要更多细节,我会提供。

LE:我要计算的对象由以下项定义

public class Pattern {
     string pattern;
     PatternType type;
     Relation r;
}
尤瓦尔·伊茨恰科夫(Yuval Itzchakov)

在Spark中,PairRDDFunctions.reduceByKey使用RDD[(K, V)]并使用已定义的分区程序对数据进行分区(造成随机播放)。如果没有提供这样的分区程序,它将使用默认值HashPartitioner来决定将哪个键值对传递给哪个工作程序。如果您将Java类用作不会覆盖其hashCode方法的键,reduceByKey则将决定如何基于Java的数据对数据进行分区Object.hashCode这意味着相同的密钥将被分担给不同的工作人员,在那里它们将部分减少。理想情况下,这不是您想要的。您想要的是具有相同密钥的所有对象都将通过相同的工作线程减少。然后,当在每个工作人员还原自己的密钥后将它们重新混合时,所有键的组合器将无法根据其哈希码来匹配键,这解释了为什么您只看到部分减少的数据而不是汇总的数据单个键上的数据。

你需要做的是提供适当hashCode equals执行。这在Spark文档中有所说明(感谢@VitaliyKotlyarenko):

注意:在键-值对操作中使用自定义对象作为键时,必须确保自定义equals()方法与匹配的hashCode()方法一起使用。有关完整的详细信息,请参见Object.hashCode()文档中概述的合同。

例如:

public class Pattern {
     string pattern;
     PatternType type;
     Relation r;

     @Override
     public int hashCode() {
        return 371 * pattern.hashCode();
     }

     @Override 
     public boolean equals(Object other) {
        if (this == other) return true;
        if (other == null || this.getClass() != other.getClass()) return false;

        Pattern pattern = (Pattern) other;
        return this.pattern.equals(pattern.pattern);
     }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

reduceByKey与groupByKey,aggregateByKey与CombineByKey之间的火花差异

如何在excel中不拖尾斜杠的情况下提取url的最终段?

在`reduceByKey`期间火花容器和执行器OOM

Javascript减少推送总和+最终总和

通过键火花总和而不减少行

基于条件的列的火花数据帧总和

用减法进行最终的总和的方法

执行for循环后打印出最终总和

如何聚合 MongoDB 的最终总和?从之前计算的总和

火花-为什么火花作业工期不等于每个阶段工期的总和?

使用相同的键火花SQL总和行并附加总和值

为什么在reduceByKey之后所有数据最终都集中在一个分区中?

为什么在reduceByKey之后所有数据最终都集中在一个分区中?

Dragula不拖拽

列表不拖尾python

SQL查询初始和最终余额以及事件总和

如何找到整个numpy轴的最终累积总和?

列表的分组依据和总和是最终的聚合结果

使用最终产品而不是总和的矩阵产品的快速R方法

隐藏某些单元格不包括在最终总和中

ForEach 元素确实承诺获得最终的总和角度

计算总和时,Lambda中使用的变量应为最终变量或有效最终变量?

根据火花数据框中的列值计算累积总和和平均值

如何避免...在拖欠款问题上?

如何在Elastic Search query_string请求中获取最终分数的总和?

每个子文档上的 MongoDB 日期差异,以及它们在最终结果中的总和

根据另一列的最终累加总和创建新变量

在xmgrace中更改画布大小(不拖动)

如何使用jQuery检测点击而不拖动?