Hadoop Pig:提取与给定正则表达式匹配的所有子字符串

时间:2013-07-16 01:12:01

标签: regex apache-pig

我正在解析表格中的一些数据:

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

其中parens中的短语(包括括号)被编码为单个chararray。

我想只提取L +(数字)标签来获取格式的元组:

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

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

1 个答案:

答案 0 :(得分:2)

如果订单无关紧要,那么这将有效:

-- 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)})

一般来说,如果你不知道阵列会有多少元素,那么一个包将更好。