获取空值,同时使用Pig解析XML
问题描述:
我有一个XML文件,如下所示。我使用XMLLOader
加载XML。它工作正常。但是,尽管获取的值它给空值:获取空值,同时使用Pig解析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;
脚本的输出如下:
它不givning任何错误,但输出是()。我已经更新了XML文件,我想解析所有的值。
答
你可以试试吗?
要打印的 'FFV' 属性的值,按您的例子:
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>'));
答
可以执行此操作
required_tags =的foreach input_xml生成FLATTEN(REGEX_EXTRACT_ALL(DOC,'\ S *(。)\ S()\ S()\ s(。 (。*)'))AS(ffv,sn,st,vn,cbt); dump required_tags;
第二个工作是打印所有的值,但第一个不工作得到单个值 – user2572165 2014-11-05 15:34:58
对我来说它的工作正常。你能粘贴input_xml的转储吗? – 2014-11-05 16:16:40
上面提到的XML不是完整的XML文件,它有很多其他tags.when我复制上述到单独的XML,然后我能够使用您的第二个解决方案获取值。但是,当我试图从完整的XML它不工作。 – user2572165 2014-11-06 03:28:43