将FILTER的正则表达式与Pig Latin(或一般的java)一起使用



我正试图通过数据集中的一个字段进行解析。我正试图用标题中任何位置都包含括号"{"的电影过滤掉所有元组。当我运行此程序时,我收到一个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正则表达式中,{字符标记由名称表示的字符类的开始,例如{Alpha}。只使用Java,就可以用反斜杠字符(Java也要求对其进行转义)来转义大括号字符:\{

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

这意味着您应该能够在"MATCHES"Pig拉丁运算符中直接应用转义。

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

最新更新