MapReduce之Reduce端Join實現

2021-07-09 02:09:46 字數 1155 閱讀 5890

mapreduce之helloword很簡單,但是要想繼續自己來寫,還有很多坑要注意。這不,咱們這回來個reduce端join實現。網上一搜,有很多,我們要來個自己的吧。

廢話少說,先上傳一些資料到hdfs上。

input/pd.csv(假設這個是產品名稱檔案)

input/sale.csv(假設這個是銷售記錄,資料和單價)

1,2,3

2,3,5

3,4,6

很明顯,他們通過第一列id來join.

在reduce階段,相同key的資料全部在一起,這樣通過名稱是字元,銷量是數字來簡單判斷左邊和右邊,輸出結果。

下面直接上**:

執行的時候指定引數為

hdfs:

hdfs:

這樣得到的輸出結果為:

中間需要注意的地方,一不小心就中雷了:

1. 在map和reduce方法上加個@override有好處,這樣方便檢視是否符合介面規範,引數是否有錯。

2.出現recude好像結果沒有合併,找不到左邊或者右邊,結果檔案中顯示部分值為空,可能需要注意中間的值形式

不要隨便遍歷iterablevalues

不要隨便設定combiner   

不要隨意static

賦值的時候要考慮是否指向位址還是copy。

3.自定義型別的時候可能遇到type mismatch in key from map: expected org.apache.hadoop.io.text, recieved org.apache.hadoop.io.longwritable

這個時候要檢查map和reduce的輸入輸出型別是否正確。例如:

這裡的前面兩個是輸入的型別,後面兩個是map的輸出型別

public static class myreducer extends reducer

這裡前面兩個是map的輸出,也是reduce的輸入,後面兩個是reduce的輸出型別

4.使用2.0版的api和以前舊的方式有所不同,很容易混淆,例如

import org.apache.hadoop.mapred.inputformat;

import org.apache.hadoop.mapreduce.lib.input.fileinputformat;

這裡的包mapred和mapreduce有不同的。

Python高階函式之map與reduce

python為我們提供了多種高階函式,map fun,x 的作用是將fun函式依次作用到x這種iterable型別上,並且返回乙個iterator型別。那麼什麼是iterable和iterator呢?簡單的說,反是可用於for迴圈的物件 諸如list,tuple,dict,str 被稱為iterab...

大資料之Map reduce

大資料問題一般解決方式 利用雜湊函式進行分流來解決記憶體限制或者其他限制的問題。1.雜湊函式又叫雜湊函式,雜湊函式的輸入域可以是非常大的範圍,但是輸出域是固定範圍。假設為s。雜湊函式的性質 1.典型的雜湊函式都擁有無限的輸入值域。2.輸入值相同時 返回值一樣。3.輸入值不同時,返回值可能一樣,也可能...

MapReduce之Partition的使用與分析

partition主要作用就是將map的結果傳送到相應的reduce。這就對partition有兩個要求 1 均衡負載,盡量的將工作均勻的分配給不同的reduce。2 效率,分配速度一定要快。mapreduce預設的partitioner是hashpartitioner。除了這個mapreduce還...