我正在处理pig中的一些数据,这些数据包括感兴趣的字符串,可以选择用分号分隔,并按随机顺序排列,例如。
test=12345;foo=bar
test=12345
foo=bar;test=12345
以下代码应提取测试“key”的字符串值:
blah =
FOREACH
data
GENERATE
FLATTEN (
EXTRACT (
str_of_interest,
'test=(\\S+);?'
)
)
AS (
test: chararray
)
;
但是,在运行代码时,我遇到以下错误:
<line 46, column 0> mismatched character '<EOF>' expecting '''
2013-04-16 04:46:05,245 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 46, column 0> mismatched character '<EOF>' expecting '''
一开始我以为我的regex转义语法已经关闭了,但这似乎不是问题所在。我从google搜索中得到的唯一信息是一个bug报告,它看起来最近已经被修复了,但是它仍然是我运行的amazon emr集群上的一个问题(对于这个分析,刚才是临时启动的)。
正如在错误报告中以及其他地方所建议的那样,将分号替换为其unicode等价物(\u003b)会产生相同的错误。
我可能是疯了,这可能是一个语法问题,所以我希望有人能给我指出正确的方向,或确认这是一个存在的问题。如果是后者,是否有解决方法(在pig中,或者匹配我想要的字符串)?
干杯
2条答案
按热度按时间rhfm7lfc1#
这是一个将在0.12中修复的bug(请参阅http://issues.apache.org/jira/browse/pig-2507)
如果您不能更改分隔符或等待新版本发布(在emr上,这可能比实际的apache版本需要更长的时间),我将实现自己的udf并以某种方式硬编码正则表达式。可以使用regexextract作为起点。
显然,你也可以通过应用补丁来构建你自己的pig版本,但我想这有点复杂。
oprakyz72#
看起来您正在为pig使用amazon的字符串操作和datetime函数,因为
EXTRACT()
不是内置函数。尝试切换到使用内置函数
REGEX_EXTRACT_ALL()