以格式
在关系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)"
答案 0 :(得分:1)
在B上执行FOREACH
时,你不能引用C.因为C是由B构建的。你需要使用B构建的投影,即A
查看描述模式 B:{group:int,A:{(id:int,min:chararray,fan:chararray,max:chararray)}}
为什么你不能使用A,因为它会起作用