Spark分區詳解!DT大資料夢工廠王家林老師親自講解!

來源:互聯網
上載者:User

標籤:分區   spark   分區   

Spark分區詳解!DT大資料夢工廠王家林老師親自講解!


http://www.tudou.com/home/_79823675/playlist?qq-pf-to=pcqq.group


一、分區和分區的區別?

分區是從資料角度,分區是從計算的角度,其實都是從大的狀態,split成小的。


二、spark分區理解

rdd作為一個分布式的資料集,是分布在多個worker節點上的。如所示,RDD1有五個分區(partition),他們分布在了四個worker nodes 上面,RDD2有三個分區,分布在了三個worker nodes上面。

650) this.width=650;" src="https://pic3.zhimg.com/20049c7cecf2107389107e42881b844e_b.jpg" alt="20049c7cecf2107389107e42881b844e_b.jpg" />

三、預設分區

一般情況下,是從hdfs檔案儲存體的block數量作為分區的大小,但有時候一條記錄誇block,那麼會出現多一個的情況,而且block會略大於或小於128MB。


四、重新分區

想要重新給rdd分區,分兩種情況,建立 RDD 時和通過轉換操作得到新 RDD 時。

對於前者,在調用 textFile 和 parallelize 方法時候手動指定分區個數即可。例如 sc.parallelize(Array(1, 2, 3, 5, 6), 2) 指定建立得到的 RDD 分區個數為 2。


對於後者,直接調用rdd.repartition方法就可以了,如果想具體控制哪些資料分布在哪些分區上,可以傳一個Ordering進去。比如說,我想要資料隨機地分布成10個分區,可以:

class MyOrdering[T] extends Ordering[T]{
 def compare(x:T,y:T) = math.random compare math.random
}

// 假設資料是Int類型的
rdd.repartition(10)(new MyOrdering[Int])



實際上分區的個數是根據轉換操作對應多個 RDD 之間的依賴關係來確定,窄依賴子 RDD 由父 RDD 分區個數決定,例如 map 操作,父 RDD 和子 RDD 分區個數一致;Shuffle 依賴則由分區器(Partitioner)決定,例如 groupByKey(new HashPartitioner(2)) 或者直接 groupByKey(2) 得到的新 RDD 分區個數等於 2。





Spark分區詳解!DT大資料夢工廠王家林老師親自講解!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.