regex - Hadoop pig : Extract all substrings matching a given regular expression

标签 regex apache-pig

我正在解析以下形式的一些数据:

(['L123', 'L234', 'L1', 'L253764'])
(['L23', 'L2'])
(['L5'])
...

括号内的短语(包括方括号)被编码为单个字符数组。

我只想提取 L+(数字)标签以获得以下形式的元组:

((L123, L234, L1, L253764))
((L23, L2))
((L5))

我尝试使用正则表达式“(L\d+)”使用 REGEX_EXTRACT_ALL,但它似乎每行只提取一个标签,这对我来说毫无用处。有没有办法按照我上面描述的方式创建元组?

最佳答案

如果顺序无关紧要,那么这将起作用:

-- foo is the tuple, and bar is the name of the chararray
B = FOREACH A GENERATE TOKENIZE(foo.bar, ',') AS values: {T: (value: chararray)} ; 
C = FOREACH B {
    clean_values = FOREACH values GENERATE  
                   REGEX_EXTRACT(value, '(L[0-9]+)', 1) AS clean_value: chararray ; 
    GENERATE clean_values ;
} 

架构和输出是:

C: {clean_values: {T: (clean_value: chararray)}}
({(L123),(L234),(L1),(L253764)})
({(L23),(L2)})
({(L5)})

通常,如果您不知道数组将包含多少个元素,那么包会更好。

关于regex - Hadoop pig : Extract all substrings matching a given regular expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666465/

相关文章:

json - 有没有一种直接的方法可以将存储在 HDFS 中的数据转换为 JSON?

java - java中的正则表达式和替换

objective-c - Objective C 中使用正则表达式和 nsarray 进行字符串操作以及可变字符串

java - 如何修复以下正则表达式?

java - 在 "11111"中查找 "111111111111111"的索引的正确正则表达式是什么?

正则表达式匹配给定字符后的文本,不包括字符本身

apache-pig - 在 PIG 脚本中连接不同记录

search - 何时使用Hadoop,何时使用ElasticSearch进行分组依据/方面?

hadoop - 使用 PigLatin 删除重复项并保留最后一个元素

apache-pig - 如何使用piggybank中的over函数