使用pig latin仅提取xml文件中的某些标记

时间:2014-01-03 01:21:58

标签: apache-pig

我想只从下面的xml文件中提取状态。

<&。表GT;

 <State>Florida</State>

 <id>123</id>

&LT; ./表&gt;

&LT;&。表GT;

 <State>Texas</State>

 <id>456</id>

&LT; ./表&gt;

  • 预期输出:

    (佛罗里达)

    (得克萨斯州)

但是下面的猪声明我得到了

()

()作为输出

A = LOAD&#39; hdfs:/user.xml'使用org.apache.pig.piggybank.storage.XMLLoader(&#39;表&#39;) AS(x:chararray);

B =生成一个平坦的FLATTEN(REGEX_EXTRACT_ALL(x,

'<Table>\\n\\s*<State>(.*)</State>\\n\\s*\\n\\s*</Table>')) 

as (state:chararray);

请帮助我了解我出错的地方或如何消除某个标记行?

1 个答案:

答案 0 :(得分:0)

这看起来像一个有缺陷的正则表达式,在结束</State>后你使用的\\n\\s*\\n\\s*</Table>似乎忽略了<id>...</id>元素。你有没有看过在UDF中使用一些XML解析库?它可能比试图手工构建一堆正则数据更容易。

编辑:另一个建议。您确定文件中的行分隔符只是\n,您可能需要\r\n作为分隔符,在这种情况下,[\r\n]+应该有助于查看this post以获取更多详细信息。