我在Apache PIG中有以下关系。
TSERIES: {ORDERED: {(timestamp: long,contentHost: chararray)},ts1: long}
我想做以下几点:
F = foreach TSERIES {
ts = filter ORDERED by timestamp > TSERIES.ts1;
generate ts;
}
简而言之,我想用高于 ts1 的时间映射保持 bag ORDER 的所有元素,但是猪不会允许,特别是这部分ts = filter ORDERED by timestamp > TSERIES.ts1;
.
这可能吗?我正在使用版本 0.9.2-cdh4.0.1
(cloudera)。
你试过吗:
测试 = 过滤器 tseries By (ordered.timestamp> ts1);
我不确定是否有办法在没有 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;