我一直在使用Pig和XMLLOADER来加载xml文件。我一直在练习BOOK的例子。但是,我需要处理的 XML 文件在标记中有冒号。当我运行脚本时,它说由于":",它无法处理。(最后的确切日志)
这是我拥有的文件。修改为":"大小写。书.xml
<CATALOG>
<BC:BOOK id="1">
<TITLE>Hadoop Defnitive Guide</TITLE>
<AUTHOR>Tom White</AUTHOR>
<COUNTRY>US</COUNTRY>
<COMPANY>CLOUDERA</COMPANY>
<PRICE>24.90</PRICE>
<YEAR>2012</YEAR>
</BC:BOOK>
<BOOK id="2">
<TITLE>Programming Pig</TITLE>
<AUTHOR>Alan Gates</AUTHOR>
<COUNTRY>USA</COUNTRY>
<COMPANY>Horton Works</COMPANY>
<PRICE>30.90</PRICE>
<YEAR>2013</YEAR>
</BOOK>
</CATALOG>
现在这是 BOOK.pig(注意:用正则表达式和 Xpath 尝试过这个,这就是为什么两者都出现并且错误仍然存在的原因)
REGISTER piggybank.jar
DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();
A = LOAD 'BOOKT' using org.apache.pig.piggybank.storage.XMLLoader('BC:BOOK') as (x:chararray);
dump A;
--B = foreach A GENERATE FLATTEN(REGEX_EXTRACT_ALL(x,'<BC:BOOK>\s*<TITLE>(.*)</TITLE>\s*<AUTHOR>(.*)</AUTHOR>\s*<COUNTRY>(.*)</COUNTRY>\s*<COMPANY>(.*)</COMPANY>\s*<PRICE>(.*)</PRICE>\s*<YEAR>(.*)</YEAR>\s*</BC:BOOK>'));
B = FOREACH A GENERATE flatten XPath(x, 'BC:BOOK/AUTHOR'), XPath(x, 'BC:BOOK/PRICE');
describe B;
这是错误:
ERROR org.apache.pig.tools.pigstats.PigStats - ERROR 0:java.lang.RuntimeException: java.lang.RuntimeException: XML tag identifier 'BC:BOOK' does not match the regular expression /[a-zA-Z_][0-9a-zA-Z-_]+/
我的问题是我应该在 XMLLOADE(字符串标识符)中放入什么,以便我可以拥有带有":"的标签(我无法修改存钱罐.jar,我尝试将 : 作为 xml 特殊代码,我尝试使用 XMLLOADER('sth'+'sth')...
一个不太简洁的解决方案是将其加载到pig存储中,然后将":"替换为",然后使用XMLLOADER加载它。