我有以下xml数据:
<CompactData><my:DataSet><my:Series VAL="A" AMOUNT_TYPE="FI" IDENTIFIER="1"><my:Obs AMT="24.25" UNIT_MEASURE="KG"></my:Obs></my:Series><my:Series VAL="B" AMOUNT_TYPE="GI" IDENTIFIER="2"><my:Obs AMT="21.22" UNIT_MEASURE="KG"></my:Obs></my:Series></my:DataSet></CompactData>
我正在尝试使用pig中的以下命令将其转换为csv格式:
A = LOAD '/testing/mydata.xml' using org.apache.pig.piggybank.storage.XMLLoader('CompactData') as (x:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(x,'<my:Series VAL="([^"]+)" AMOUNT_TYPE="([^"]+)" IDENTIFIER="([^"]+)"><my:Obs AMT="([^"]+)" UNIT_MEASURE="([^"]+)"></my:Obs></my:Series>')) AS (val:chararray,amount_type:chararray,identifier:chararray,amt:chararray,unit_measure:chararray);
把正则表达式 <my:Series VAL="([^"]+)" AMOUNT_TYPE="([^"]+)" IDENTIFIER="([^"]+)"><my:Obs AMT="([^"]+)" UNIT_MEASURE="([^"]+)"><\/my:Obs><\/my:Series>
在regexr中给出了两个完美的匹配,但pig只是不想使用它。它总是给我一个空的结果,而我期望如下:
a、 fi,1,24.25千克
b、 gi,2,21.22千克
更新1:这似乎最有可能与这里提到的问题有关:用冒号加载标记时出现pig xmloader错误
1条答案
按热度按时间0md85ypi1#
假设您的代码没有给出错误,我可以在这里想到3个潜在的问题:
你的正则表达式没有被调用
您的正则表达式(在pig中)没有返回预期结果
正则表达式的输出不显示
为了应对这种情况,我建议采取以下步骤:
创建一个pig程序,成功地使用regex在“aba”中查找“b”
创建一个pig程序,成功地在“aba”中找到“a”的两个匹配项
创建一个pig程序,成功地在aba中找到第一个a
不断“增长”这个解决方案,直到你达到你的实际解决方案
如果您仍然陷入困境,请分享上一个有效的解决方案,以及第一个无效的解决方案(包括输入!)