嵌套的FOREACH语句似乎不支持该组。我有以下架构:
data2: {group: chararray,data1: {(lt: chararray,ln: chararray)}}
我要在其上展平data1,将所有对(lt,ln),count,order DESC分组,最后限制为1.
这个想法是为每个组提取最可能的一对(lt,ln)。你会怎么建议我这样做?
答案 0 :(得分:1)
为了最快的执行,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);
}
或者你可以展平data2和data1并从grp1开始。