5
假設我創造這樣的RDD(我用Pyspark):Spark如何決定如何分區RDD?
list_rdd = sc.parallelize(xrange(0, 20, 2), 6)
然後我打印與glom()
方法分區元素,並獲得
[[0], [2, 4], [6, 8], [10], [12, 14], [16, 18]]
是如何星火決定如何分割我的列表?元素的具體選擇從哪裏來?它可以以不同的方式耦合它們,留下除0和10之外的其他元素,以創建6個請求的分區。第二次運行時,分區是相同的。
使用較大的範圍內,29元件,我得到分區中接着是三個元件2個元件的圖案:
list_rdd = sc.parallelize(xrange(0, 30, 2), 6)
[[0, 2], [4, 6, 8], [10, 12], [14, 16, 18], [20, 22], [24, 26, 28]]
使用較小的範圍9種元素的我得到
list_rdd = sc.parallelize(xrange(0, 10, 2), 6)
[[], [0], [2], [4], [6], [8]]
所以我推斷Spark是通過將列表分割成一個配置來生成分區,其中最小的可能是後面跟着更大的集合,然後重複。
問題是,如果這個選擇背後有一個原因,這是非常優雅的,但它也提供性能優勢?