【问题标题】:Extracting string from logs with regex in pig script在猪脚本中使用正则表达式从日志中提取字符串
【发布时间】:2017-11-08 15:56:47
【问题描述】:

我有日志数据,我想将每个信息提取到一个变量中

以下是示例一行日志。 {:id=>306, :name=>"bblite", :cpu=>{:quota=>4, :allocated=>4, :actual=>0}, :memory=>{:quota=>8192, :allocated=>8192, :actual=>8578}, :cluster_stats=>{"wc1104"=>{:cpu=>0, :mem=>8578}}}

我需要一个具有所有 id 的变量、一个具有所有名称的变量、一个具有 CPU 的变量和一个具有所有集群统计信息的变量

以下是我的猪脚本的一部分。我可以存储 ID,但我不知道如何使用正则表达式提取其余 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;

【问题讨论】:

    标签: regex hadoop apache-pig


    【解决方案1】:

    以下代码 sn-p 是我编写的有效的正则表达式:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2014-10-17
      • 2013-02-24
      • 2016-02-28
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多