XPath - Scalar在输出中有多行

时间:2016-03-02 12:34:04

标签: hadoop xpath apache-pig

我尝试使用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行。如何删除其他行?

1 个答案:

答案 0 :(得分:2)

如果要在foreach的GENERATE部分中使用B.mytag(假设FOREACH不在B上),则必须首先确保B只有一行。否则,不清楚你试图引用哪个B.mytag。