【问题标题】:Using a regular expression for FILTER with Pig Latin (or java in general)使用带有 Pig Latin(或一般的 java)的 FILTER 的正则表达式
【发布时间】:2016-03-07 05:11:06
【问题描述】:

我正在尝试解析数据集中的单个字段。我正在尝试过滤掉所有在标题中包含括号“{”的电影的元组。当我运行它时,我收到一个 java 错误,说我下面的不是有效的正则表达式。

raw_actors = LOAD 'hdfs:/user/XXX' USING org.apache.pig.piggybank.storage.CSVExcelStorage('\t') AS (name:chararray,movie_data:chararray,role:chararray);
movie_actors = FILTER raw_actors BY NOT(movie_data MATCHES '.*{.*');

当我在表达式的开头取出 .* 时,它会运行,但没有过滤掉任何内容...关于编写一个不关心给定字符之前或之后的内容的正则表达式有什么建议吗?

【问题讨论】:

    标签: java regex hadoop filter apache-pig


    【解决方案1】:

    在 Java 正则表达式中,{ 字符标志着由名称表示的字符类的开始,例如{Alpha}。仅使用 Java,您可以使用反斜杠字符(Java 也需要转义)转义左大括号字符:\\{

    根据the Pig Latin Reference Manual,您应该为“MATCHES”运算符“使用Java format 进行正则表达式”,该运算符链接到描述正则表达式语法的Pattern 的Javadoc。

    这意味着您应该能够直接在“MATCHES”Pig Latin 运算符中应用转义。

    movie_actors = FILTER raw_actors BY NOT(movie_data MATCHES '.*\\{.*');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多