groupByKey 在火花中无法正常工作
Posted
技术标签:
【中文标题】groupByKey 在火花中无法正常工作【英文标题】:groupByKey not properly working in spark 【发布时间】:2015-06-09 12:29:02 【问题描述】:所以,我有一个 RDD,它有如下键值对。
(Key1, Val1)
(Key1, Val2)
(Key1, Val3)
(Key2, Val4)
(Key2, Val5)
在 groupByKey 之后,我希望得到类似的东西
Key1, (Val1, Val2, Val3)
Key2, (Val4, Val5)
但是,我发现即使在执行 groupByKey() 之后,也会重复相同的键。键值对的总数肯定减少了,但仍然有很多重复的键。可能是什么问题?
键的类型基本上是一个具有整数类型字段的 Java 类。难道spark也在考虑对象的字段以外的东西来识别那些对象?
【问题讨论】:
我不知道这个问题的确切原因。但我建议你使用 reducebykey。它在性能方面比 groupbykey 更好。在大的情况下 groupbykey 也会给你带来严重的问题。 @shivams:但是 reduceBykey 不是用于不同的目的吗?例如总结一个键的值?虽然 groupForKey 用于收集给定键的列表中的值?还是没有? shivams 假设您要对列表进行聚合。这就是大多数时候发生的事情。但如果您需要实际列表,那么groupByKey
就是您的票。
reduceByKey 应该在可能的情况下优先于 groupByKey,但是正如您所说,使用两者都有很好的理由。虽然这不是问题的重点!在您的 Java 类中,您是否正确覆盖了 .equals 和 hashcode()?如果没有,您可以发布一些代码吗?
@DanielDarabos Okey 我读到 reducebykey 比 groupbykey 更好。但我认为 groupbykey 的每一个案例都不能被替换。如果我错了,请纠正我。
【参考方案1】:
groupByKey
和 Spark 中的许多其他方法都依赖于对象哈希。如果您的类的两个实例没有返回相同的hashCode
,那么即使它们的所有字段都相等,Spark 也不会认为它们相等。
确保覆盖equals
和hashCode
!
【讨论】:
像魅力一样工作。谢谢:)!以上是关于groupByKey 在火花中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
JAVA - Apache BEAM- GCP:GroupByKey 与 Direct Runner 一起工作正常,但与 Dataflow runner 一起失败