2017-04-11 71 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