Hadoop - 使用 XPath 在 XML 个节点上进行 PIG 循环
Hadoop - PIG loop on XML nodes using XPath
我有一个 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;
我尝试使用上面的代码,但它 return 只有 1 行但是对于 Foreach 它应该 return 节点的所有行。
我们可以使用循环通过 Hive 来完成吗?对我来说似乎很难....
有指点吗????
谢谢。
修改您的代码如下。
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)
我有一个 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;
我尝试使用上面的代码,但它 return 只有 1 行但是对于 Foreach 它应该 return 节点的所有行。
我们可以使用循环通过 Hive 来完成吗?对我来说似乎很难....
有指点吗????
谢谢。
修改您的代码如下。
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)