使用冒号加载标签时出现 Pig xmlloader 错误

Posted

技术标签:

【中文标题】使用冒号加载标签时出现 Pig xmlloader 错误【英文标题】:Pig xmlloader error when loading tag with colon 【发布时间】:2015-06-19 13:47:55 【问题描述】:

我一直在使用 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,我尝试将 : 作为 xml 特殊代码,我尝试使用 XMLLOADER('sth'+'sth')...

【问题讨论】:

【参考方案1】:

一个不太简洁的解决方案是将其加载到猪存储中,然后将 ':' 替换为 '',然后使用 XMLLOADER 加载它。

【讨论】:

以上是关于使用冒号加载标签时出现 Pig xmlloader 错误的主要内容,如果未能解决你的问题,请参考以下文章

转储 Json 数据时出现 Apache Pig 错误

在 PIG 中执行命令时出现警告

在 pig 中使用 UDF 时出现错误 1070

当我尝试运行 pig + cassandra 时出现错误?请帮助

将 Pig 与 Hadoop 一起使用时出现“无法创建 DataStorage”错误

运行 Pig 脚本时出现异常