pig:如何在extract函数的regex参数中包含分号

1dkrff03  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(389)

我正在处理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中,或者匹配我想要的字符串)?
干杯

rhfm7lfc

rhfm7lfc1#

这是一个将在0.12中修复的bug(请参阅http://issues.apache.org/jira/browse/pig-2507)
如果您不能更改分隔符或等待新版本发布(在emr上,这可能比实际的apache版本需要更长的时间),我将实现自己的udf并以某种方式硬编码正则表达式。可以使用regexextract作为起点。
显然,你也可以通过应用补丁来构建你自己的pig版本,但我想这有点复杂。

oprakyz7

oprakyz72#

看起来您正在为pig使用amazon的字符串操作和datetime函数,因为 EXTRACT() 不是内置函数。
尝试切换到使用内置函数 REGEX_EXTRACT_ALL()

相关问题