我一直在使用Pig和XMLLOADER来加载xml文件。我一直在练习BOOK的例子。但是,我需要处理的XML文件在标记中有冒号。当我运行一个脚本时,它说由于':'它无法处理。(最后的确切日志)
这是我的文件。修改为“:”的目的。 BOOKT.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( STRING 标识符)中放置什么以便我可以使用“:”标记(我无法修改piggybank.jar,我试过了put:作为xml特殊代码,我尝试使用XMLLOADER('sth'+'sth')......
答案 0 :(得分:0)
一个,不是那么简洁的解决方案,是将它加载到猪存储器,然后用''替换':',然后用XMLLOADER加载它。