【发布时间】:2015-01-18 07:02:42
【问题描述】:
当减少分区数量时,可以使用coalesce,这非常棒,因为它不会导致随机播放并且似乎可以立即工作(不需要额外的工作阶段)。
有时我想反其道而行之,但repartition 会引发洗牌。我想几个月前我实际上是通过使用CoalescedRDD 和balanceSlack = 1.0 来完成这项工作的——所以会发生什么情况是它会拆分一个分区,以便生成的分区位于同一个节点上(如此小的网络IO)。
这种功能在 Hadoop 中是自动的,只需调整拆分大小。除非减少分区的数量,否则它在 Spark 中似乎不会以这种方式工作。我认为解决方案可能是编写一个自定义分区器以及一个自定义 RDD,我们在其中定义 getPreferredLocations ......但我认为这是一件如此简单和常见的事情,肯定必须有一种直接的方法吗?
尝试过的事情:
.set("spark.default.parallelism", partitions) 在我的SparkConf 上,并且在阅读镶木地板的情况下我尝试过sqlContext.sql("set spark.sql.shuffle.partitions= ...,它在 1.0.0 上会导致错误并且不是我想要的,我希望分区号改变所有类型的工作,而不仅仅是洗牌。
【问题讨论】:
-
运气好能找到解决方案吗?
标签: scala apache-spark