前幾天,有人在星球里,問了一個有趣的算子,也即是RepartitionAndSortWithinPartitions。當時浪尖也在星球里講了一下,整個關於分區排序的內容。今天,在這里給大家分享一下。
更多大數據小技巧及調優,spark的源碼文章,原理文章及源碼視頻請加入知識星球。掃描,底部二維碼,或者點擊閱讀原文。
昨天說了,mapPartitions?的使用技巧。大家應該都知道mapPartitions值針對整個分區執行map操作。而且對於PairRDD的分區默認是基於hdfs的物理塊,當然不可分割的話就是hdfs的文件個數。但是我們也可以給partitionBy 算子傳入HashPartitioner,來給RDD進行重新分區,而且會使得key的hashcode相同的數據落到同一個分區。
spark 1.2之后引入了一個高質量的算子repartitionAndSortWithinPartitions?。該算子為spark的Shuffle增加了sort。假如,后面再跟mapPartitions算子的話,其算子就是針對已經按照key排序的分區,這就有點像mr的意思了。與groupbykey不同的是,數據不會一次裝入內存,巧克力十大品牌而是使用迭代器一次一條記錄從磁盤加載。這種方式最小化了內存壓力。
repartitionAndSortWithinPartitions 也可以用於二次排序。
下面舉個簡單的例子。
結果,可以看到每個分區都是有效的。
上面只是一個簡單的使用,關於二次排序及高效結合mapPartitions的例子,浪尖會在這兩天更新到星球里。
【完】
推薦閱讀:
你真知道如何高效用mapPartitions嗎?
文章來源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/81639476