如何在pig中读取带有嵌套节点的XML文件

时间:2015-05-21 07:25:50

标签: xml nested apache-pig nodes

我想在PIG中读取一个XML文件。 XML文件如下所示:

<pdv id="10000001" latitude="" .... >
[....]
 <prix id="1" maj="2007-01-01 00:00:00" valeur="12"\>
 <prix id="1" maj="2007-01-01 00:00:01" valeur="15"\>
 <prix id="1" maj="2007-01-02 00:00:00" valeur="56"\>
</pdv>

对于每个pdv(零售店),该文件有几个包含数据价格的节点。我想收集每个零售店的所有价格,如下:

10000001,2007-01-01 00:00:00,12
10000001,2007-01-01 00:00:01,15
10000001,2007-01-02 00:00:00,56

我尝试使用这个脚本:

REGISTER piggybank.jar

A =  LOAD 'xmls/stations.xml' using  org.apache.pig.piggybank.storage.XMLLoader('pdv') as (x:chararray);

B = foreach A GENERATE FLATTEN(REGEX_EXTRACT_ALL(x,'<pdv id="[0-9]*" latitude[\\s\\S]*<prix id="1" maj="[^a-z]*" valeur="[0-9]*"/>[\\s\\S]*</pdv>')) AS (id:chararray,prix:float);

dump B;

但我只获得了每个零售店的第一个节点。嵌套节点太多,无法在脚本中枚举它们。我尝试使用Xpath或XMLStreamingLoader,但这些语法似乎不起作用。

1 个答案:

答案 0 :(得分:0)

你可以尝试使用带有@的XPath来获取里面的所有属性。下面的代码可能会对您有所帮助。

A = LOAD'xmls / stations.xml'使用org.apache.pig.piggybank.storage.XMLLoader('pdv')as(x:chararray);

B = foreach A GENERATE XPath(x,'pdv / prix / @ id')AS id, XPath(x,'pdv / prox / @ maj')AS maj, XPath(x,'pdv / prox / @ valeur')AS valeur;

转储B;