【问题标题】:extract part of field in pig提取猪的部分田地
【发布时间】:2013-10-22 08:21:48
【问题描述】:

我有日志文件,

116.48.29.143 - - [01/Oct/2013:20:28:21 +0530] "GET /test.php HTTP/1.1" 200 749 "-" "Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1;SV1;.NET CLR 1.1.4322)"

145.89.87.211 - - [01/Oct/2013:20:28:21 +0530] "GET /test.php HTTP/1.1" 200 613 "-" "Mozilla/4.0 (兼容; MSIE 6.0; Windows NT 5.1;SV1;.NET CLR 1.1.4322)"

REGISTER file:/home/hadoop/lib/pig/piggybank.jar;
DEFINE EXTRACT org.apache.pig.piggybank.evaluation.string.EXTRACT();             
DEFINE CustomFormatToISOorg.apache.pig.piggybank.evaluation.datetime.convert.CustomFormatToISO();
DEFINE ISOToUnix org.apache.pig.piggybank.evaluation.datetime.convert.ISOToUnix();
DEFINE DATE_TIME org.apache.pig.piggybank.evaluation.datetime.DATE_TIME();
DEFINE FORMAT_DT org.apache.pig.piggybank.evaluation.datetime.FORMAT_DT();
DEFINE FORMAT org.apache.pig.piggybank.evaluation.string.FORMAT();

A = LOAD 'input' USING TextLoader AS (line:chararray);

B = FOREACH A GENERATE FLATTEN (REGEX_EXTRACT_ALL(line,'^(\\S+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] "(.+?)" (\\S+) (\\S+) "([^"]*)" "([^"]*)"') ) AS (remoteAddr:chararray, remoteLogname: chararray, user: chararray,  time: chararray, request: chararray, status: int, bytes_string: chararray, referrer: chararray, browser: chararray);

我的问题是提取分钟,我的意思是从 [01/Oct/2013:20:28:21 +0530] 我只需要得到 28:21

我怎样才能提取它??

【问题讨论】:

  • 提示:标准库中有一个STRSPLIT UDF,您需要的值似乎由两边的单个空格分隔。
  • 好的,我会试试的,谢谢。我的总体目标是...我需要获取时间戳之间的差异。我可以这样做吗?
  • 如果您需要区别,为什么要删除日期?
  • 我的意思是我需要每分钟获取日志..我提供了示例日志,我每秒获取日志,现在我需要知道每秒的日志。

标签: hadoop apache-pig


【解决方案1】:

您已经知道如何编写正则表达式,那么为什么不修改已有的正则表达式或编写一个新的呢?这是一个新的:

C = FOREACH A GENERATE REGEX_EXTRACT(time, '[\\w/]+:\\d{2}([\\d:]+)\\s[+\\-]\\d{4}') AS hourMin;

【讨论】:

    【解决方案2】:

    我为这种应用程序编写了一个特殊的 Pig Loader。 这样可以更轻松地解析 Apache HTTPD 日志文件。

    您可以在您的 pig 应用程序中以如下方式使用它:

    REGISTER httpdlog-pigloader-1.0-SNAPSHOT-job.jar
    
    Clicks = 
      LOAD 'access_log.gz' 
      USING nl.basjes.pig.input.apachehttpdlog.Loader(
        '%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"',
        'IP:connection.client.host',
        'TIME.MINUTE:request.receive.time.minute',
        'HTTP.URI:request.firstline.uri',
        'STRING:request.firstline.uri.query.foo',
        'STRING:request.status.last',
        'HTTP.URI:request.referer',
        'STRING:request.referer.query.foo',
        'HTTP.USERAGENT:request.user-agent')
      AS ( 
        ConnectionClientHost,
        RequestReceiveTimeMinute,
        RequestFirstlineUri,
        RequestFirstlineUriQueryFoo,
        RequestStatusLast,
        RequestReferer,
        RequestRefererQueryFoo,
        RequestUseragent);
    

    你可以在这里下载:https://github.com/nielsbasjes/logparser

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多