【发布时间】: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 的每一个案例都不能被替换。如果我错了,请纠正我。
标签: scala mapreduce apache-spark