在hadoop的mapreduce中預設patitioner是hashpartitioner,我們可以自定義partitioner可以有效防止資料傾斜, 在spark裡面也是一樣,在spark裡也是預設的hashpartitioner, 如果自己想自己定義partitioner繼承org.apache.spark裡面的partitioner並且重寫它裡面的兩個方法就行了.
//只需要繼承partitioner,重寫兩個方法
class
mypartitioner
(val num: int)
extends
partitioner
對list裡面的單詞進行wordcount,並且輸出按照每個單詞的長度分割槽輸出到不同檔案裡面
自定義partitioner如下:
class
mypartitioner
(val num: int)
extends
partitioner
}
object xy ).reducebykey(_ + _)
//這裡指定自定義分割槽,然後輸出
println(rdd2.collect().tobuffer)
sc.stop()
}}
因為這裡定義的是4個partition 所以最後產生4個檔案 如圖:
其中part-00000 和 part-00001如下:
其中part-00002 和 part-00003如下:
其中part-00000中zhangsan的長度對4取模為0和這個檔案中其他較短的單詞一樣,所以在乙個分割槽, part-00003沒有內容,說明上面的單詞的長度對4取模結果沒有為3的
Spark自定義排序
在這之前,我們先準備一些資料,使用rdd存放 獲得sparkcontext val conf sparkconf newsparkconf setmaster local 2 val sc newsparkcontext conf val rdd sc.parallelize list 公尺家雷射投...
Spark自定義排序
spark支援我們自定義,只需要繼承相應的類就可以了,我在下面準備了乙個用身高和年齡做二次排序的例子,希望可以幫到大家 首先寫乙個排序類 名字 年齡 身高 class people val name string val age int,val hight int extends ordered p...
Spark 自定義排序
考察spark自定義排序 package com.rz.spark.base import org.apache.spark.rdd.rdd import org.apache.spark.自定義排序 object customsort1 不滿足要求 tp.3,false 將rdd裡面封裝在user...