我想只从下面的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);
请帮助我了解我出错的地方或如何消除某个标记行?
答案 0 :(得分:0)
这看起来像一个有缺陷的正则表达式,在结束</State>
后你使用的\\n\\s*\\n\\s*</Table>
似乎忽略了<id>...</id>
元素。你有没有看过在UDF中使用一些XML解析库?它可能比试图手工构建一堆正则数据更容易。
编辑:另一个建议。您确定文件中的行分隔符只是\n
,您可能需要\r\n
作为分隔符,在这种情况下,[\r\n]+
应该有助于查看this post以获取更多详细信息。