Hadoop pig XPath 返回空属性值
Posted
技术标签:
【中文标题】Hadoop pig XPath 返回空属性值【英文标题】:Hadoop pig XPath returning empty attribute value 【发布时间】:2016-03-09 09:11:22 【问题描述】:我使用的是 cloudera Hadoop 2.6,pig 0.15 版本。
我正在尝试从 xml 文件中提取数据。您可以在下面看到部分 xml 文件。
<product productID="MICROLITEMX1600LAMP">
<basicInfo>
<category lang="NL" id="OT1006">Output Accessoires</category>
</basicInfo>
</product>
我可以使用 XPath() 函数转储节点值但不能转储属性值。您可以看到下面的代码返回空元组而不是 productID。
DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();
allProducts = LOAD '/pathtofile/sample.xml' USING org.apache.pig.piggybank.storage.XMLLoader('product') AS (data:chararray);
productsOneByOne = FOREACH allProducts GENERATE XPath(data, 'product/@productID') AS productid:chararray
dump productsOneByOne;
请帮我解决这个问题。
【问题讨论】:
见这里***.com/questions/32789734/… 感谢您的回复。我试过了,但它对我不起作用。返回错误。 productsOneByOne = FOREACH allProducts GENERATE XPathAll(x, 'product/@productID', true, false).$0 as (productid:chararray);错误 org.apache.pig.tools.grunt.Grunt - 错误 1025: 无效的字段投影。架构中不存在投影字段 [x]:data:chararray。 @inquisitive_mind 感谢您提供链接。这对我帮助很大。我自己发布了答案。请检查一下。 【参考方案1】:向How to extract xml attributes using Xpath in Pig?添加更多内容
XPath.java 中存在错误,因为它忽略了第四个参数。
通过在 XPath.java 中添加以下代码,编译的问题得到解决。 http://svn.apache.org/repos/asf/pig/branches/branch-0.15/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/xml/XPath.java
if(input.size() > 3)
ignoreNamespace=input.get(3);
上面的代码要加在前面
if (ignoreNamespace)
xpathString = createNameSpaceIgnoreXpathString(xpathString);
【讨论】:
以上是关于Hadoop pig XPath 返回空属性值的主要内容,如果未能解决你的问题,请参考以下文章
Hadoop - 使用 XPath 在 XML 节点上的 PIG 循环