【发布时间】:2018-06-30 14:58:36
【问题描述】:
我有一个这样的 RDD:
JavaPairRDD<String, String>
有很多条目,并且一些键重复了很多次。当我应用groupByKey 或combineByKey 时,它会生成另一个
JavaPairRDD<String, Iterable<String>
这就是问题所在,对于某些键集,值的数量非常庞大(因为特定键是倾斜的)。这会导致进一步的下游消费出现问题,甚至会产生内存问题。
我的问题是如何限制每个键聚合的值的数量。我想按键分组,但是值列表不应超过限制 X 数。任何溢出的值都应该添加到新行,有没有办法做到这一点?
【问题讨论】:
-
听起来你可以在 rdd 上使用
map并删除列表太长的值。 -
我不想失去价值。我只想将其保留为具有相同键和其余值(溢出值)的新条目。
-
这样的话
flatMap应该更合适。 -
如果你愿意,我可以使用 Scala(你可以转换为 Java)给你一个答案。
-
我不确定如何拆分值并创建两个相同键的条目。如果你放弃 scala,我会得到一些想法。谢谢。
标签: java apache-spark bigdata rdd