我有一些分组数据:
glu: (
group:tuple(foo:bytearray, bar:chararray),
bam: bag {
:tuple(foo:bytearray, bar:chararray, pom:Long)
}
)
我想要的是做一个嵌套的交叉产品来获取所有pom对,并且过滤器只能减少到第一个pom小于第二个pom的对。结束这样的事情:
glu: (
group:tuple(foo:bytearray, bar:chararray),
bam: bag {
:tuple(foo:bytearray, bar:chararray, pom1:Long, pom2:Long)
}
)
类似的东西:
glupairs = FOREACH glu {
pairs = CROSS bam, bam;
filtered = FILTER pairs BY (bam1 != bam2) AND (bam1 < bam2);
GENERATE group, filtered;
};
当然,这不起作用。有没有办法做到这一点?我可以采取与自身关系的交叉产品吗?如何在之后选择字段(进行过滤)?
提前致谢。
答案 0 :(得分:1)
我通过这样做来解决这个问题:
glupairs = FOREACH glu {
copied = FOREACH bam GENERATE -(-pom); -- Deals with the self cross bug
pairs = CROSS bam, copied;
filtered = FILTER pairs BY (bam.pom != copied.pom) AND (bam.pom < copied.pom);
GENERATE group, filtered;
};