嵌套的FOREACH语句

时间:2013-06-21 15:05:35

标签: apache-pig

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

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

我要在其上展平data1,将所有对(lt,ln),count,order DESC分组,最后限制为1.

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

1 个答案:

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