我尝试使用XML中的信息创建别名。我的代码有这种结构。
REGISTER /usr/lib/pig/piggybank.jar
DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();
A = LOAD 'foo.xml' using org.apache.pig.piggybank.storage.XMLLoader('Document') as (x:chararray);
B = FOREACH A GENERATE XPath(x, 'Document/foo/bar/tag') as myTag:chararray;
C = LOAD 'foo.xml' using org.apache.pig.piggybank.storage.XMLLoader('someOtherTag') as (x:chararray);
D = FOREACH C GENERATE
B.myTag,
XPath(x, 'someOtherTag/taggy') as FOO:chararray;
dump D;
当我尝试显示D或存储它时,我总是得到错误0:标量在输出中有多行。 (共同原因:"加入"然后" FOREACH ......生成foo.bar"应该是" foo :: bar")
错误不是很有意义。怎么解决这个问题?
好的,我发现B有一行以上。这很难,因为说明和转储只显示1行,但后来我用了
B_GROUP = GROUP B BY myTag;
B_COUNT = FOREACH B1_GROUP GENERATE COUNT(B);
illustrate B_COUNT
现在显示B行2行。如何删除其他行?
答案 0 :(得分:2)
如果要在foreach的GENERATE部分中使用B.mytag(假设FOREACH不在B上),则必须首先确保B只有一行。否则,不清楚你试图引用哪个B.mytag。