如何在pig中读取具有嵌套节点的xml文件

deyfvvtc  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(413)

我想在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,但这些语法似乎不起作用。

68bkxrlz

68bkxrlz1#

可以尝试使用xpath和@来获取其中的所有属性吗。下面的代码可能对您有所帮助。
a=使用org.apache.pig.piggybank.storage.xmlloader('pdv')加载'xmls/stations.xml'(x:chararray);
b=foreach a生成xpath(x,'pdv/prox/@id')作为id,xpath(x,'pdv/prox/@maj')作为maj,xpath(x,'pdv/prox/@valeur')作为valeur;
b排土场;

相关问题