我在pig中被字符串解析卡住了。
我看了周围的文件 regex_extract
以及 regex_extract_all
并希望使用其中一个功能。
我有档案 '/logs/test.log'
:
cat '/logs/test.log'
user=242562&friend=6226&friend=93856&age=35&friend=35900
我想提取 friend
标记,在本例中,我有3个相同的标记。 regex_extract
似乎只适用于第一个示例,这是我所期望的,而且 regex_extract_all
,似乎我已经知道了整个字符串模式,它在源文件的每一行上都会发生变化。
看上去还可以 regex_extract
,但这个选项只给了我第一个。
[root@test]# pig -x local
A = LOAD './test.log';
B = FOREACH A GENERATE REGEX_EXTRACT($0, 'friend=([0-9]*)',1);
dump B;
(6226)
我看到的例子 regex_extract_all
在查找所有标记的地方显示regex:
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL($0, 'user=([0-9]+?)&friend=([0-9]+?)&friend=([0-9]+?)&.+?'));
dump B;
(242562,6226,93856)
这似乎有效,但我真的只想提取的朋友-(62269385635900)。我也有这样的情况,每个用户可能有多于或少于3个朋友。
有什么想法吗?
同时考虑使用 FLATTEN(TOKENIZE($0,'&'))
然后不知何故只在屏幕上过滤 SUBSTRING($0,0,INDEXOF($0,'=')) == 'friend'
或者类似的,但是想看看是否有人知道一个好的regex方法。
2条答案
按热度按时间ne5o7dgx1#
试试这个:
xdnvmnnf2#
这可以通过简单的字符串操作来实现:
结果: