iT邦幫忙

2023 iThome 鐵人賽

DAY 28
1
AI & Data

30天胡搞瞎搞學會pyspark系列 第 28

[ Day 28 ] - Pyspark | Performance - 寫在最後的效能議題 : 資料傾斜(Skew)

  • 分享至 

  • xImage
  •  

Pyspark的效能調校將會分為四的主題說明

  1. 開發習慣
  2. 參數調校
  3. 資料傾斜(Skew)
  4. Shuffle
    今天主要會從資料傾斜來做闡述,開始囉

資料傾斜(Skew)

先來簡單說明一下什麼是資料傾斜吧~
相信大家還記得Pyspark是建構在一個平行運算的架構上,當然所謂平行運算意味著有多個處理器可以進行處理,所以所謂資料傾斜就是指資料放置位置不平均,
舉個比較生活化的例子,

就像是你上班的時候主管工作量分配不均,導致你累死,但是你的同事天天都在打game一樣,既沒有效率又浪費資源,所以要怎麼樣才能夠解決這樣的問題呢?
這時候合理的分配你的工作量就很重要,所以通常都會是藉由key去分配你的Data,當key可以非常平均的做分散時,意味著他可以分配到每一個節點去做處理

哪些操作會造成資料傾斜

distinct、groupByKey、reduceByKey、aggregateByKey、join

如何處理呢?

  1. 最簡單的方式就是盡量避免使用會造成你資料傾斜(Data Skew)的操作
  2. 設計一個唯一的key 去做資料的讀取,可以幫助你在一開始讀資料時就能有效地處理傾斜問題
  3. 使用repartition來重新給定分區位置
import pyspark.sql.functions as F
df = df.withColumn('apple', F.rand())
df = df.repartition(5, 'apple')

結語

在處理資料時多多少少都會因為資料傾斜的問題困擾我們許久,在處理少量資料的時候還可以單純依靠加大記憶體,或是節點的數量來解決問題,不過一旦遇到大量資料時,這些方法可能也就不了你,所以還是得了解資料,才能夠幫助你成為一個更有效率的data engineer~

如果有任何不理解、錯誤或其他方法想分享的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱!

我是 Vivi,一位在雲端掙扎的資料工程師!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium,期待與您的相遇!】

參考資料:
https://medium.com/@suffyan.asad1/handling-data-skew-in-apache-spark-techniques-tips-and-tricks-to-improve-performance-e2934b00b021


上一篇
[ Day 27 ] - Pyspark | Performance - 寫在最後的效能議題 : 參數調校
下一篇
[ Day 29 ] - Pyspark | Performance - 寫在最後的效能議題 : Shuffle Issue (map-reduce))
系列文
30天胡搞瞎搞學會pyspark30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言