我在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)。
答案 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;