我正在使用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 '''
我认为我首先关闭了正则表达式转义语法,但这似乎不是问题所在。我从谷歌搜索获得的唯一信息是bug report似乎最近已经修复,但它仍然是我正在运行的Amazon EMR集群上的一个问题(刚刚开始临时调整,用于此分析)。
如错误报告和其他地方所建议的那样,将分号替换为其等效的Unicode(\ u003B)会产生相同的错误。
我可能会疯狂,这可能是一个语法问题,所以我希望有人能够指出我正确的方向或确认这是一个存在的问题。如果是后者,是否有任何变通方法(在Pig中,或者匹配我想要的字符串)?
干杯
答案 0 :(得分:1)
这是一个将在0.12(见http://issues.apache.org/jira/browse/PIG-2507)
中修复的错误如果您无法更改分隔符或等待发布新版本(在EMR上这可能需要比实际的Apache版本更长的时间),我将实现自己的UDF并以某种方式对正则表达式进行硬编码。您可以使用RegexExtract作为起点。
显然你也可以通过应用补丁建立你自己的猪版本,但我想这有点复杂。
答案 1 :(得分:0)
看起来你正在使用亚马逊的字符串操作和猪日期时间函数,因为EXTRACT()
不是内置函数。
尝试切换到使用内置函数REGEX_EXTRACT_ALL()