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

sdnqo3pr  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(365)

我正在分析表单的一些数据:

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

其中括号内的短语(包括括号)被编码为单个字符。
我只想提取l+(数字)标记以获得以下形式的元组:

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

我试过使用regex\u extract\u,所有的方法都是使用正则表达式'(l\d+),但是它似乎每行只提取一个标记,这对我来说是无用的。有没有一种方法可以像我上面描述的那样创建元组?

6za6bjd0

6za6bjd01#

如果顺序不重要,那么这将起作用:

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

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

相关问题