我正在使用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;
请帮我解决这个问题。
答案 0 :(得分:0)
向How to extract xml attributes using Xpath in Pig?
添加更多内容XP在XPath.java中存在错误,因为它忽略了第4个参数。
通过在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);
}