在使用Pig解析XML时获取空值

时间:2014-11-05 13:00:16

标签: apache-pig

我有一个类似以下的XML文件。我正在使用XMLLOader加载XML。它工作正常。但是,在获取值时,它会给出空值:

<mfh>
    <f></f>
    <sn>***</sn>
    <st>****</st>
    <vnr>****</vnr>
    <cb>***</cb>
</mfh>
<md>
    <nei>
        <ne>***</ne>
        <k>***</k>
        <n>***</n>
    </nei>
    <mi>
        <mts>**</mts>
        <g>**</g>
        <mv>
            <m>***</m>
        </mv>
    </mi>
   .....
   .....
</md>

我的猪脚本如下:

REGISTER '/usr/lib/pig/piggybank.jar'
a = load '/user/root/sample.xml' using org.apache.pig.piggybank.storage.XMLLoader('mfh') as (doc:chararray);
dump input_xml;
b = foreach input_xml generate FLATTEN(REGEX_EXTRACT_ALL(doc,'<mfh>\\s*<ffv>(.*)</ffv>\\s*</mfh'));
dump required_tags;

脚本的输出如下:

没有任何错误,但输出是()。我已经更新了XML文件,我想解析所有的值。

2 个答案:

答案 0 :(得分:0)

你能试试吗?

打印&#39; ffv&#39;的价值根据您的示例属性:

 required_tags = foreach input_xml generate FLATTEN(REGEX_EXTRACT_ALL(doc,'<mfh>\\s+<ffv>(.*)</ffv>.*'));

打印ffv,sn,st,vn,cbt:

的所有值
   required_tags = foreach input_xml generate FLATTEN(REGEX_EXTRACT_ALL(doc,'<mfh>\\s+<ffv>(.*)</ffv>\\s+<sn>(.*)</sn>\\s+<st>(.*)</st>\\s+<vn>(.*)</vn>\\s+<cbt>(.*)</cbt>\\s+</mfh>'));

答案 1 :(得分:0)

你可以这样做

required_tags = foreach input_xml生成FLATTEN(REGEX_EXTRACT_ALL(doc,&#39; \ s *(。)\ s (。)\ s (。 )\ s (。)\ s (。*)&#39;))AS(ffv,sn,st,vn,cbt); dump required_tags;