Hadoop - 使用 XPath 在 XML 节点上的 PIG 循环

Posted

技术标签:

【中文标题】Hadoop - 使用 XPath 在 XML 节点上的 PIG 循环【英文标题】:Hadoop - PIG loop on XML nodes using XPath 【发布时间】: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 使用循环来做到这一点?对我来说似乎很难......

任何指针????

谢谢。

【问题讨论】:

【参考方案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)

【讨论】:

对***.com/questions/32921201/…的任何建议

以上是关于Hadoop - 使用 XPath 在 XML 节点上的 PIG 循环的主要内容,如果未能解决你的问题,请参考以下文章

在单个节点上使用 XPath 返回所有节点中的元素

Hadoop pig XPath 返回空属性值

第64天: XPath 和 lxml

第64天: XPath 和 lxml

Xpath基础

在 Hadoop 中处理复杂的 XML 以提取数据