0

嵌套 FOREACH 语句似乎不支持该组。我有以下架构:

data2: {group: chararray,data1: {(lt: chararray,ln: chararray)}}

我想在其上展平data1,将所有对(lt,ln),计数,顺序DESC分组,最后限制1。

这个想法是为每个组提取最可能的 (lt, ln) 对。你会如何建议我这样做?

4

1 回答 1

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 开始。

于 2013-06-21T16:01:01.250 回答