嵌套 FOREACH 语句似乎不支持该组。我有以下架构:
data2: {group: chararray,data1: {(lt: chararray,ln: chararray)}}
我想在其上展平data1,将所有对(lt,ln),计数,顺序DESC分组,最后限制1。
这个想法是为每个组提取最可能的 (lt, ln) 对。你会如何建议我这样做?
嵌套 FOREACH 语句似乎不支持该组。我有以下架构:
data2: {group: chararray,data1: {(lt: chararray,ln: chararray)}}
我想在其上展平data1,将所有对(lt,ln),计数,顺序DESC分组,最后限制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);
}
或者您可以展平 data2 和 data1 并从 grp1 开始。