我想使用Pig Latin从xml中提取属性。
这是xml文件的示例
<CATALOG>
<BOOK>
<TITLE test="test1">Hadoop Defnitive Guide</TITLE>
<AUTHOR>Tom White</AUTHOR>
<COUNTRY>US</COUNTRY>
<COMPANY>CLOUDERA</COMPANY>
<PRICE>24.90</PRICE>
<YEAR>2012</YEAR>
</BOOK>
</CATALOG>
我使用过这个脚本,但它不起作用:
REGISTER ./piggybank.jar
DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();
A = LOAD './books.xml' using org.apache.pig.piggybank.storage.XMLLoader('BOOK') as (x:chararray);
B = FOREACH A GENERATE XPath(x, 'BOOK/TITLE/@test'), XPath(x, 'BOOK/PRICE');
dump B;
输出结果为:
(,24.90)
我希望有人可以帮助我。 感谢。
答案 0 :(得分:1)
piggybank的XPath类中有2个错误:
ignoreNamespace逻辑中断了对XML属性的搜索 https://issues.apache.org/jira/browse/PIG-4751
ignoreNamepace参数默认为true且无法覆盖 https://issues.apache.org/jira/browse/PIG-4752
以下是我使用XPathAll的解决方法:
XPathAll(x, 'BOOK/TITLE/@test', true, false).$0 as (test:chararray)
此外,如果您仍需要忽略名称空间:
XPathAll(x, '//*[local-name()=\'BOOK\']//*[local-name()=\'TITLE\']/@test', true, false).$0 as (test:chararray)