在pig脚本中使用regex从日志中提取字符串

mcvgt66p  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(352)

我有日志数据,我想把每个信息提取到一个变量中
以下是单行日志示例{:id=>306,:name=>“bblite”,:cpu=>{:quota=>4,:allocated=>4,:actual=>0},:memory=>{:quota=>8192,:allocated=>8192,:actual=>8578},:cluster\u stats=>{“wc1104”=>{:cpu=>0,:mem=>8578}}
我需要一个具有所有ID的变量,一个具有所有名称的变量,一个具有CPU的变量和一个具有所有集群统计信息的变量
下面是我的Pig脚本的一部分。我可以存储id,但是我不知道如何使用regex提取其余的id。
. . .

matching_messages = FILTER raw_lines BY (LOWER(message) MATCHES '.*cc_altus-plaform.*');

ids = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'id=>\\d*',0);

names = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"\\",',0);

line_with_date = FOREACH matching_messages GENERATE
DateFormatter(timestamp) AS formatted_time: chararray, message;

DUMP names;
kr98yfug

kr98yfug1#

下面的代码片段是我编写的正则表达式,它可以工作:

id = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'(?<=id=>)\\d*',0);

name = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"[\\w]*\\"',0);

cpu = FOREACH matching_messages GENERATE REPLACE( REGEX_EXTRACT(message, 'cpu=>\\{.*?\\}',0), ',','');

memory = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'memory=>\\{.*?\\}',0);

cluster = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'cluster_stats=>\\{.*?\\}',0);

相关问题