我正在寫一個pyspark腳本來讀取一個大的二維數組,因此我試圖首先生成一個索引數組並使用讀取方法映射以讀取相應的數組。例如,如果我有一個包含10行的數組,那麼我希望這10行均勻分區,因爲每個分區有2行。我想這種方式與sortBy():爲什麼sortBy()無法在Spark中均勻排序數據?
rdd = sc.range(0, 10, 1).sortBy(lambda x: x, numPartitions = 5)
rdd.glom().collect()
然而,結果顯示爲:
[[0, 1, 2], [3, 4], [5, 6], [7, 8], [9]]
指示sortBy()沒有工作,如我所料,所以第一個分區有3個數字,而最後一個分區只有1個數字。當我用另一個讀取方法映射每個分區時,分區的大小是不同的,有時會引起失落。
我試着RDDS代的另一種方式:
rdd = sc.parallelize(range(0, 10, 1), 5)
rdd.glom().collect()
,並返回我想要的結果。
[[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
有人可以幫助解釋爲什麼使用sortBy()的第一個方法不能返回均勻排序的結果嗎?