假设我有一个8节点的Spark集群,具有8个分区(即每个节点具有1个分区) 现在,如果我尝试通过使用结点(4)将分区数减少到4, 1.合并会执行随机播放吗? 2.如果是,那么新创建的4个分区将驻留在哪些节点上?
答案 0 :(得分:3)
如果您查看Coalesce的Spark API文档。然后是
coalesce(int numPartitions, boolean shuffle, scala.math.Ordering<T> ord)
默认情况下,随机播放标志为False。分区通过将随机播放标志更改为True来调用相同的方法。有了此信息,现在让我们回答您的问题
要将分区数从8更改为4,必须进行随机播放。但是在这里,您明确地表示“否”以洗牌。 因此在这种情况下的分区数不会更改。
即使您尝试增加分区数,它也不会改变。由于shuffle标志为False。希望对您有帮助
干杯!
答案 1 :(得分:1)
Coalesce默认情况下将改组标记设置为False。
如果必须增加分区,则可以在shuffle标志设置为true的情况下使用合并(如果为false,则分区保持不变),也可以使用重新分区
如果要减少分区,最好将标志设置为False的合并使用,因为这样可以避免完全重排,这与保证重排的分区不同。 错误混洗的合并将一个分区上的数据移动到另一个现有分区,从而避免完全混洗,从而提供更好的性能。 例如,来自分区5,6,7,8的数据将被移至现有分区1,2,3,4,而不是重新整理所有8个分区的数据
确定所驻留的节点数据是由您所使用的分区程序决定的
答案 2 :(得分:0)
coalesce(numpartitions)-用于减少分区数而不改组 coalesce(numpartitions,shuffle = false)-由于shuffle = false选项,spark不会执行任何改组,并用于减少分区数 Coalesce(numpartitions,shuffle = true)-由于shuffle = true选项,火花将执行改组,并用于减少和增加分区
示例: 假设rdd最初有8个分区
rdd.coalesce(4)-将产生4个partitons作为输出 rdd.coalesce(4,false)-将产生4个partitons作为输出 rdd.coalesce(10,false)-将产生8个partitons作为输出(shuffle = false将能够减少partitons但不能增加) rdd.coalesce(4,true)-将产生4个partitons作为输出 rdd.coalesce(10,true)-输出10个partitons(shuffle = true将能够增加partitons)