0
看來,嵌套的FOREACH語句不支持該組。我有以下模式:嵌套的FOREACH語句
data2: {group: chararray,data1: {(lt: chararray,ln: chararray)}}
上,我要扁平化數據1,組中的所有對(LT,LN),計數,順序降序,並最終限制1.
的想法是提取每組最可能的一對(lt,ln)。你會如何推薦我這麼做?
看來,嵌套的FOREACH語句不支持該組。我有以下模式:嵌套的FOREACH語句
data2: {group: chararray,data1: {(lt: chararray,ln: chararray)}}
上,我要扁平化數據1,組中的所有對(LT,LN),計數,順序降序,並最終限制1.
的想法是提取每組最可能的一對(lt,ln)。你會如何推薦我這麼做?
爲了最快執行UDF將是最好的。 在純Apache Pig中,如果在與模式建立關係之前可以指望(group,lt,ln),那將會很不錯。這是竟被這樣的事情(這只是一個僞腳本,可能需要一些調試)
Assuming load schema is (id, lt, ln)
inpt = LOAD ....... as (id, lt : chararray, ln : chararray);
grp1 = GROUP inpt BY (id, lt, ln);
data1 = FOREACH grp FLATTEN(inpt), COUNT(data1) as cnt;
data2 = GROUP data_wtih_count BY id;
--data2: {group: chararray,data1: {(id, lt: chararray,ln: chararray, cnt : int)}}
most_probable_pair = FOREACH data2 {
ord = ORDER data1 BY cnt ASC;
top = LIMIT ord 1;
GENERATE group, top.(ln, lt);
}
或者你可以扁平化數據2和數據1與GRP1開始。
很好。有效。快速問題:是什麼讓你相信UDF的計算成本更低?你的判斷是基於什麼? – user2295350
如果袋子不是太大,我認爲每個小於90MB,比使用UDF你可能得到一個「GROUP BY」而不是2。每個「GROUP BY」導致一個地圖縮減工作。由於沒有過濾,並且所有數據都通過操作分組進行,所以與通過(單個地圖縮減作業)的單個分組的UDF實施相比,它將花費兩倍的時間。 – alexeipab