[英]Using a regular expression for FILTER with Pig Latin (or java in general)
我试图通过我的数据集中的单个字段进行解析。 我试图用标题中任何位置包含括号“{”的电影过滤掉所有元组。 当我运行这个时,我得到一个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正则表达式中, {
character标记由name表示的字符类的开头,例如{Alpha}
。 使用Java,您可以使用反斜杠字符(也需要转义Java)来转义左括号字符: \\\\{
。
根据Pig Latin Reference Manual ,您应该为“MATCHES”运算符“使用正则表达式的Java 格式 ”,该运算符链接到描述正则表达式语法的Javadoc for Pattern
。
这意味着您应该能够直接在“MATCHES”Pig Latin运算符中应用转义。
movie_actors = FILTER raw_actors BY NOT(movie_data MATCHES '.*\\{.*');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.