PigLatin:一个组中的所有对-用交叉和过滤器嵌套foreach

x6yk4ghg  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(272)

我有一些分组数据:

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;
};

当然,这是行不通的。有办法吗?我能把一个关系的叉积取出来吗?以后如何选择字段(进行筛选)?
提前谢谢。

mctunoxg

mctunoxg1#

我是这样想的:

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;
};

相关问题