【问题标题】:Hadoop - PIG loop on XML nodes using XPathHadoop - 使用 XPath 在 XML 节点上的 PIG 循环
【发布时间】:2015-10-02 18:14:27
【问题描述】:

我有一个 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 到另一个 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 使用循环来做到这一点?对我来说似乎很难......

任何指针????

谢谢。

【问题讨论】:

    标签: xml hadoop xpath hive apache-pig


    【解决方案1】:

    如下修改您的代码。

    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)

    【讨论】:

    猜你喜欢
    • 2016-01-22
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多