在PIG中使用xpath提取XML中的属性值

4
我有以下输入的XML。
<Type>  
    <Source>        
        <TimeStamp>2016-02-19T12:27:06.387Z</TimeStamp>
        <IPAddress IPVersion="IPv4">x.xx.xxx.xxx</IPAddress>
        <Port>64435</Port>
        <DNS_Name>x.xx.xxx.xxx.range9-27.abc.com</DNS_Name>
    </Source>
 </Type>

我正在尝试使用以下代码检索上述标签中的所有值。
REGISTER piggybank-0.15.0.jar
            DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();

        A =  LOAD 'test.xml' using org.apache.pig.piggybank.storage.XMLLoader('Type') as (x:chararray);
        B = FOREACH A GENERATE 
                               XPath(x, 'Source/TimeStamp')
                               ,XPath(x, 'Source/IPAddress')
                               ,XPath(x, 'Source/IPAddress/@IPVersion')
                               ,XPath(x, 'Source/Port')
                               ,XPath(x, 'Source/DNS_Name');

当我转储B时,我会得到以下输出,其中IPVersion的值缺失。
(2016-02-19T12:27:06.387Z,x.xx.xxx.xxx,,64435,x.xx.xxx.xxx.range9-27.abc.com) 

可以有人帮我解决这个问题吗?

我认为你可以通过XPathAll来实现这个。请看我的答案。 - Ram Ghadiyaram
如果可以的话,您能否标记为“已被所有者接受”? - Ram Ghadiyaram
1个回答

2

https://pig.apache.org/docs/r0.15.0/api/org/apache/pig/piggybank/evaluation/xml/XPathAll.html - Ram Ghadiyaram
piggybank-0.12.0.jar 包含这个类,您需要检查您的 jar 版本是否包含此类。 - Ram Ghadiyaram
它对我不起作用。它抛出以下错误 2016-05-26 06:56:19,884 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: 无法使用导入解析org.apache.pig.piggybank.evaluation.xml.XPathALL:[, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.] - Sathyaraj
你是否已经在Piggybank Jar版本中注册了XpathAll类? - Ram Ghadiyaram
注册 ./piggybank.jar 定义 XPath org.apache.pig.piggybank.evaluation.xml.XPath(); 同样,您必须像这个示例中显示的那样定义 XpathAll。 - Ram Ghadiyaram
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接