使用pig在xpath中进行xml嵌套解析

ibps3vxo  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(474)

我正在尝试使用pig解析带有嵌套标记的xml文件。我有下面的xml示例。

<Document>
    <medicationsInfo>
     <code>10160-0</code>
     <entryInfo> 
        <statusCode>completed</statusCode>
        <startTime>20110729</startTime>
        <endTime>20110822</endTime>
        <strengthValue>24</strengthValue>
        <strengthUnits>h</strengthUnits>
     </entryInfo> 
     <entryInfo>
        <statusCode>completed</statusCode>
        <startTime>20120130</startTime>
        <endTime>20120326</endTime>
        <strengthValue>12</strengthValue>
        <strengthUnits>h</strengthUnits>
     </entryInfo>
     <entryInfo>
        <statusCode>completed</statusCode>
        <startTime>20100412</startTime>
        <endTime>20110822</endTime>
        <strengthValue>8</strengthValue>
        <strengthUnits>d</strengthUnits>
     </entryInfo>  
    </medicationsInfo>
    <ProductInfo>
     <code>10160-0</code>
     <entryInfo> 
        <statusCode>completed</statusCode>
        <startTime>20110729</startTime>
        <endTime>20110822</endTime>
        <strengthValue>24</strengthValue>
        <strengthUnits>h</strengthUnits>
     </entryInfo> 
     <entryInfo>
        <statusCode>completed</statusCode>
        <startTime>20120130</startTime>
        <endTime>20120326</endTime>
        <strengthValue>12</strengthValue>
        <strengthUnits>h</strengthUnits>
     </entryInfo>
     <entryInfo>
        <statusCode>completed</statusCode>
        <startTime>20100412</startTime>
        <endTime>20110822</endTime>
        <strengthValue>8</strengthValue>
        <strengthUnits>d</strengthUnits>
     </entryInfo>  
    </ProductInfo>
   </Document>

我正在写下面的代码来获取药物结果的entryinfo信息,但是我得到了一个错误。
代码:

Register /home/cloudera/piggybank-0.16.0.jar;
DEFINE XPathAll org.apache.pig.piggybank.evaluation.xml.XPathAll();
DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();
A =  LOAD '/home/cloudera/Parsed_CCD.xml' using org.apache.pig.piggybank.storage.XMLLoader('medicationsInfo/entryInfo') as (x:chararray);
B = FOREACH A GENERATE XPathAll(x, 'statusCode',false,true), XPathAll(x, 'medicationsInfo/code/code',false,true).$0, XPathAll(x,'strengthValue',false,true).$1;
DUMP B;

错误:
[main]info org.apache.pig.backend.hadoop.executionengine.mapreducelayer.mapreducelauncher-失败[main]error org.apache.pig.tools.grunt.grunt-错误1066:无法打开别名b的迭代器
预期产量:

completed 20110729 20110822 24 h
completed 20120130 20120326 12 h
completed 20100412 20110822  8 d
sz81bmfz

sz81bmfz1#

以下代码将生成预期输出:

Register /home/cloudera/piggybank-0.16.0.jar;

DEFINE XPathAll org.apache.pig.piggybank.evaluation.xml.XPathAll();

--DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();

A =  LOAD 'home/cloudera/Parsed_CCD.xml' 
using org.apache.pig.piggybank.storage.XMLLoader('medicationsInfo') as (x:chararray);

B = FOREACH A GENERATE 
XPathAll(x, 'medicationsInfo/entryInfo/statusCode').$0, 
XPathAll(x, 'medicationsInfo/entryInfo/startTime').$0,
XPathAll(x, 'medicationsInfo/entryInfo/endTime').$0,
XPathAll(x, 'medicationsInfo/entryInfo/strengthValue').$0,
XPathAll(x, 'medicationsInfo/entryInfo/strengthUnits').$0;

C = FOREACH A GENERATE 
XPathAll(x, 'medicationsInfo/entryInfo/statusCode').$1, 
XPathAll(x, 'medicationsInfo/entryInfo/startTime').$1,
XPathAll(x, 'medicationsInfo/entryInfo/endTime').$1,
XPathAll(x, 'medicationsInfo/entryInfo/strengthValue').$1,
XPathAll(x, 'medicationsInfo/entryInfo/strengthUnits').$1;

D = FOREACH A GENERATE 
XPathAll(x, 'medicationsInfo/entryInfo/statusCode').$2, 
XPathAll(x, 'medicationsInfo/entryInfo/startTime').$2,
XPathAll(x, 'medicationsInfo/entryInfo/endTime').$2,
XPathAll(x, 'medicationsInfo/entryInfo/strengthValue').$2,
XPathAll(x, 'medicationsInfo/entryInfo/strengthUnits').$2;

BCD = UNION B,C,D;

DUMP BCD;

相关问题