在Apache PIG中按父值过滤包

时间:2012-10-03 17:06:02

标签: hadoop mapreduce apache-pig

我在Apache PIG中有以下关系。

TSERIES: {ORDERED: {(timestamp: long,contentHost: chararray)},ts1: long}

我想做以下事情:

F = foreach TSERIES {
    ts = filter ORDERED by timestamp > TSERIES.ts1;
    generate ts;
}

简而言之,我希望将ORDERED的所有元素保留为高于ts1的时间映射, 但猪不允许,特别是这部分ts = filter ORDERED by timestamp > TSERIES.ts1;

这可能吗?我正在使用版本0.9.2-cdh4.0.1(cloudera)。

2 个答案:

答案 0 :(得分:0)

你有没有尝试过:

测试=过滤器tseries By(ordered.timestamp> ts1);

答案 1 :(得分:0)

我不确定是否有办法在没有UDF的情况下做到这一点......似乎应该有,但我也想不出来。无论如何,你可以直接写一个UDF:通过包,过滤掉一些,然后返回一个包。或者,你可以编写一个UDF来生成UUID,然后压扁包并重新组合它 - 像这样生气:

a = foreach TSERIES generate ORDERED, ts1, myudfs.GenerateUUID() as id;
b = foreach a generate FLATTEN(ORDERED) as ts, ts1, id;
c = filter b by ts.timestamp > ts1;
d = group c by id;