我想在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条答案
按热度按时间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排土场;