2017-04-11 77 views
1

它的Hadoop MapReduce的shuffle的默认行为进行排序分区内的洗牌键排序跨越分区,但是不交分区(这是总排序,使关键字排序跨越parttions)排序分区中,但没有使用星火RDD

我会问如何使用星火RDD来实现同样的事情(排序中的分区,而不是那种跨分区)

  1. RDD的sortByKey方法是做总订货
  2. RDD的repartitionAndSortWithinPartitions的分区中的排序做但不跨越分区离子,但不幸的是,它增加了一个额外的步骤来做重新分区。

是否有分区中的排序,但不能跨越分区

直接的方式

回答

2

您可以使用DatasetsortWithinPartitions方法:

import spark.implicits._ 

sc.parallelize(Seq("e", "d", "f", "b", "c", "a"), 2) 
    .toDF("text") 
    .sortWithinPartitions($"text") 
    .show 

+----+ 
|text| 
+----+ 
| d| 
| e| 
| f| 
| a| 
| b| 
| c| 
+----+ 

一般洗牌分拣分区的一个重要因素,因为它重复使用洗牌结构进行排序,而无需将所有数据一次加载到内存中。

+1

感谢@ user7849215提供了有用的答案。有没有办法做sortWithinPartitions与原始RDD? – Tom