Adr*_*ida 12 python reduce apache-spark rdd pyspark
根据Databricks的最佳实践,groupByKey
应该避免使用Spark ,因为Spark groupByKey
处理的工作方式是首先将信息拖放到工作人员之间,然后进行处理.说明
所以,我的问题是,有哪些替代方案能够groupByKey
以分布式和快速的方式返回以下内容?
// want this
{"key1": "1", "key1": "2", "key1": "3", "key2": "55", "key2": "66"}
// to become this
{"key1": ["1","2","3"], "key2": ["55","66"]}
Run Code Online (Sandbox Code Playgroud)
在我看来,可能aggregateByKey
或者glom
可以先在partition(map
)中执行,然后将所有列表连接在一起(reduce
).
maa*_*asg 18
groupByKey
如果我们想要每个键的"小"值集合,就像在问题中一样.
"不使用"警告groupByKey
适用于两个一般情况:
1)您希望聚合值:
rdd.groupByKey().mapValues(_.sum)
rdd.reduceByKey(_ + _)
在这种情况下,groupByKey
废物将实现一个集合的实现,而我们想要的只是一个元素作为答案.
2)您希望通过低基数键对非常大的集合进行分组:
allFacebookUsersRDD.map(user => (user.likesCats, user)).groupByKey()
在这种情况下,groupByKey
可能会导致OOM错误.
groupByKey
在一个执行程序中实现具有相同键的所有值的集合.如上所述,它具有内存限制,因此,根据具体情况,其他选项更好.
所有分组的功能,如groupByKey
,aggregateByKey
和reduceByKey
依靠的基础上:combineByKey
因此没有其他替代的方法是在讨论的用例较好,它们都依赖于相同的公共过程.
归档时间: |
|
查看次数: |
4651 次 |
最近记录: |