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 循环

匹配 TR 元素的 bgcolor 属性的 XPath 表达式

Mysql 返回JSON值属性的函数

Xpath - 选择具有属性的元素并获取另一个属性值

xpath的轴定位基本方式

xpath:查找具有给定属性的节点,其值包含字符串