从包中挑选一个随机值

时间:2014-06-14 08:00:43

标签: apache-pig

以格式

在关系B中对数据进行分组
1, {(1,abc), (1,def)}
2, {(2,ghi), (2,mno), (2,pqr)}

现在我想从包中挑选一个随机值,我希望输出像

1, abc
2, mno

如果我们选择第一元组作为1或第二元组2或

问题是我只对数据B进行了分组;

DESCRIBE B
B: {group: int,A: {(id: int,min: chararray,fan: chararray,max: chararray)}}

如果我试图通过

来压扁它
C = FOREACH B GENERATE FLATTEN($1)
DESCRIBE C;
C: {A::id: int,A::min: chararray,A::fan: chararray,A::max: chararray}

然后我尝试做

rand =
    FOREACH B {
        shuf_ = FOREACH C GENERATE RANDOM() AS r, *;  line L
        shuf = ORDER shuf_ BY r;
        pick1 = LIMIT shuf 1;
    GENERATE
        group,
        FLATTEN(pick1);
    };

我在第L行出现错误,此时出现错误" Pig脚本无法解析:表达式不是项目表达式:(名称:ScalarExpression)类型:null Uid:null)"

1 个答案:

答案 0 :(得分:1)

在B上执行FOREACH时,你不能引用C.因为C是由B构建的。你需要使用B构建的投影,即A

查看描述模式     B:{group:int,A:{(id:int,min:chararray,fan:chararray,max:chararray)}}

为什么你不能使用A,因为它会起作用