1。可以看到上面就是分割槽的案例,需求。
2。可以看到我們要實現上面的需求,我們把136開頭的放到分割槽0,檔案1,137開頭的放到分割槽1,檔案1,
138開頭的放到分割槽2,檔案2,139開頭的放到分割槽3,檔案3中,其他開頭的手機號,放到分割槽4,檔案4中去。
3。我們用之前手機號統計流量的那個例子來修改實現。
4。我們新建一個partitioner2的包
然後,把writable包中的之前寫的統計手機流量的例子,copy過來
5。copy過來以後,然後我們去建立一個partitioner這個類,我們自己定義的分割槽類。
6。可以看到這個partitioner有兩個,選擇長的這個要注意。
7。可以看到這個Partitioner需要個key,value對吧,那麼這個kv是什麼kv呢,可以看到資料是從,map到分割槽,然後再走到reduce中的
是透過key,value格式的資料傳遞的。
8。那好,我們現在去我們之前的mapper中去,找對應的key,value就可以了,可以看到上面
LongWritable,Text,這個是讀取的我們檔案中的內容的key,value對吧,key指的是行號,是LongWritable格式的,然後內容是Text格式的
然後,後面是處理完以後要輸出的資料,Text是手機號,然後FlowBean的對應的流量統計情況的bean。
9。獲取手機號的前3位。
10。可以看到上面,我們判斷手機號是136開頭的放到0號分割槽,以此類推。
否則放到4號分割槽。
11。然後設定完了以後,我們設定輸出路徑是一個新的路徑,然後注意,把我們剛剛寫的那個partitioner類,設定好,
可以看到job。setPartitionerClass(ProvincePartitioner。class) 設定了,我們剛剛寫好的那個類,然後
job。setNumReduceTasks(5),這裡要設定5,因為我們只有0到4,號分割槽對吧。
12。然後我們去執行一下在Driver類中,執行
13。執行以後看結果可以看到,跟預想的一樣是5個分割槽檔案對吧。可以開啟看看。
14。可以去看看0號分割槽,這個時候是136開頭的對吧,沒問題。
15。1號分割槽是137對吧,其他的也是對應的。