加载带有冒号的标记时发生xmlloader错误

ohtdti5x  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(293)

我一直在使用pig和xmloader加载xml文件。我一直在练习书本例题。但是,我需要处理的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(注意:尝试了regex和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\-_]+/

我的问题是,我应该在xmloade(字符串标识符)中输入什么,这样我就可以有带有“:”的标记(我不能修改piggybank.jar,我尝试将:作为xml特殊代码,并尝试使用xmloader('sth'+'sth')。。。

ecr0jaav

ecr0jaav1#

一个不太好的解决方案是将其加载到pig存储中,然后用“”替换“:”,然后用xmloader加载它。

相关问题