首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理用户定义的Spark分区(1.6.1) DataFrames

处理用户定义的Spark分区(1.6.1) DataFrames
EN

Stack Overflow用户
提问于 2017-01-26 16:38:00
回答 1查看 68关注 0票数 0

我有一个DataFrame,其中一个列名为problem_id,包含一个键,该键标识整个数据集的一小部分。

我不清楚keyBy + partitionBy(N) + mapPartitions是否会将数据集划分为N=|problem_id|分区,这样我就可以在每个定义的分区上并行执行一些代码。

否则,我如何才能达致这个结果呢?基本上,我需要对共享同一个problem_id的所有行应用一个函数。在sparkR中有gapply函数,但是它在Scala或Python中的等价性是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 18:33:17

默认分区器(HashPartitioner)是一个满射,因此可以将多个键散列到同一个分区。

  • gapply在SparkR中的直接等价形式是groupBy,其次是mapValues
  • 如果分组列的基数较低,则可以使用双射分词: rdd.keys().distinct().zipWithIndex().collectAsMap() (rdd .partitionBy( numPartitions=len(parition_map),partitionFunc=lambda x: pmapx) .mapPartitions(.))
  • 最后,您可以使用repartitionAndSortWithinPartitions: (rdd .repartitionAndSortWithinPartitions() .mapPartitions(.)) 记录下钥匙的变化情况。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41878477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档