pig循环

xdyibdwo  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(388)

我有一个xml文件

<Superfoo>
<foo>
    <Number>1</Number>  
    <childfoo>20</childfoo>
</foo>
<foo>
    <Number>2</Number>  
    <childfoo>10</childfoo>
</foo>
<foo>
    <Number>3</Number>  
    <childfoo>29</childfoo>
</foo>
</Superfoo>

我的要求是在节点上循环。我不想对它们进行硬编码,因为它们在不同的xml中可能有所不同。有没有什么方法可以用 PIG XPath .

A =  LOAD 'foo.xml' using org.apache.pig.piggybank.storage.XMLLoader('Superfoo') as (x:chararray);

B = FOREACH A GENERATE XPath(x, 'Superfoo/foo/Number'), XPath(x, 'Superfoo/foo/childfoo');
dump B;

我尝试使用上面的代码,但它只返回1行,但使用foreach它应该返回节点的所有行。
有没有可能,我们可以通过Hive使用循环?对我来说似乎很难。。。。
有什么建议吗????
谢谢。

tzcvj98z

tzcvj98z1#

修改代码如下。

A =  LOAD 'foo.xml' using org.apache.pig.piggybank.storage.XMLLoader('foo') as (x:chararray);

B = FOREACH A GENERATE XPath(x, 'foo/Number'), XPath(x, 'foo/childfoo');

dump B;
``` `Dump B` 将产生如下输出:
(1,20)
(2,10)
(3,29) 

相关问题