2013-10-21 101 views
-1

喜來計算平均,我想寫的僞代碼的MapReduce算法來解決以下問題: 給定的輸入記錄格式如下:
地址,郵編,城市,house_value, 請計算平均房屋價值爲每個郵政編碼。 我真的很感激,如果你能幫助我這個..僞代碼使用MapReduce的

+4

歡迎來到SO!你試過什麼了?請分享一些[僞]代碼 – Mureinik

回答

0

最簡單的辦法是使用Apache的豬,這裏是找到一個平均的一個例子:

inpt = load 'data.txt' as (address:chararray, zip:chararray, city:chararray, house_value:long); 
grp = group inpt by zip; 
average = foreach grp generate FLATTEN(group) as (zip), AVG(inpt.house_value) as average_price; 
dump average; 

僞的Map Reduce代碼,你會需要一臺MAPPER,COMBINER和一臺REDUCER

MAPPER(record): 
    zip_code_key = record['zip']; 
    value = {1, record['house_value']}; 
    emit(zip_code_key, value); 

COMBINER(zip_code_key, value_list): 
    record_num = 0; 
    value_sum = 0; 
    foreach (value : value_list) { 
     record_num += value[0]; 
     value_sum += value[1]; 
    } 
    value_out = {record_num, value_sum}; 
    emit(zip_code_key, value_out); 

REDUCER(zip_code_key, value_list): 
    record_num = 0; 
    value_sum = 0; 
    foreach (value : value_list) { 
     record_num += value[0]; 
     value_sum += value[1]; 
    } 
    avg = value_sum/record_num; 
    emit(zip_code_key, avg);