【问题标题】:extract only certain tags in xml file using pig latin使用 pig latin 仅提取 xml 文件中的某些标签
【发布时间】:2014-01-03 13:47:08
【问题描述】:

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

<.table>

 <State>Florida</State>

 <id>123</id>

<.>

<.table>

 <State>Texas</State>

 <id>456</id>

<.>

  • 预期输出:

    (佛罗里达州)

    (德克萨斯州)

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

()

() 作为输出

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

B = FOREACH A GENERATE FLATTEN (REGEX_EXTRACT_ALL(x,

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

as (state:chararray);

请帮助我了解我哪里出错了,或者我如何消除某个标语行?

【问题讨论】:

    标签: apache-pig


    【解决方案1】:

    这看起来像一个有问题的正则表达式,在关闭 &lt;/State&gt; 之后,您使用的是 \\n\\s*\\n\\s*&lt;/Table&gt;,这似乎忽略了 &lt;id&gt;...&lt;/id&gt; 元素。您是否看过在 UDF 中使用一些 XML 解析库?这可能比尝试手动构建一堆正则表达式更容易。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多