【发布时间】:2015-09-10 19:45:22
【问题描述】:
根据 Databricks 的最佳实践,应避免使用 Spark groupByKey,因为 Spark groupByKey 处理的工作方式是信息首先在工作人员之间进行洗牌,然后进行处理。 Explanation
所以,我的问题是,groupByKey 的替代方案是什么,它会以分布式和快速的方式返回以下内容?
// want this
{"key1": "1", "key1": "2", "key1": "3", "key2": "55", "key2": "66"}
// to become this
{"key1": ["1","2","3"], "key2": ["55","66"]}
在我看来,aggregateByKey 或 glom 可以先在分区 (map) 中执行此操作,然后将所有列表连接在一起 (reduce)。
【问题讨论】:
-
in the same link 下面是比 groupByKey 更喜欢的函数: combineByKey 可以在您组合元素但返回类型与输入值类型不同时使用。 foldByKey 使用关联函数和中性“零值”合并每个键的值。
-
我认为
groupByKey是这里最有效的选择(时间和存储)。如果它 OOM,您只需要一个更大的集群。
标签: python apache-spark pyspark rdd reduce