Pig XMLLoader:无法解析XML(转换为CSV)

时间:2016-06-07 18:12:18

标签: hadoop xml-parsing apache-pig

我有以下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,KG
B,GI,2,21.22,KG

更新1:这似乎很可能与此处提到的问题有关:Pig xmlloader error when loading tag with colon

1 个答案:

答案 0 :(得分:0)

假设您的代码没有出错,我可以在这里考虑3个潜在的问题:

  1. 您的正则表达式未被称为
  2. 您的正则表达式(在猪中)未返回预期结果
  3. 正则表达式的输出未显示
  4. 为了处理这种情况,我建议采取以下步骤:

    1. 创建一个猪程序,成功使用正则表达式在'aba'中找到'b'
    2. 创建一个猪程序,在'aba'
    3. 中成功找到两个'a'
    4. 创建一个猪程序,成功找到'aba'中的第一个'a'
    5. 逐步“增长”此解决方案,直到达到实际解决方案
    6. 如果您仍然遇到问题,请分享最后一个有效的解决方案,以及第一个无效的解决方案。 (包括输入!)