1

我有下面的日志,试图通过指示的列号 1 作为日期、2 作为时间、3 作为任务、4 作为 Error_Line 和 5 所有其余列作为 Error_Message 来解析它

|1     | |2     | |3   |     |4  | |5                                                                          |
09-15-16 05:23:45 B:VVBN     09064 Port 22 Device 10400 Remote 44 13331 Link Up RP2016
09-15-16 05:23:44 A:QAWE     09064 Port 22 Device 10400 Remote 44 13331 Link Up RP2016
09-15-16 05:23:44 B:VVBN     13425 Port 22 Device 10400 Remote 44 13331 Receive Time Error: 24666 23270 1396 69
09-15-16 05:23:43 B:QAWE     13372 Port 22 Device 10400 Remote 44 13331 Send Time Error: 444 1888 1444 69
09-15-16 05:23:43 A:VVBN     13425 Port 22 Device 10400 Remote 44 13331 Receive Time Error: 24666 23270 1396 69
09-15-16 05:23:43 A:CCBE     13372 Port 22 Device 10400 Remote 44 13331 Send Time Error: 444 1888 1444 69
09-15-16 05:21:56 B:VVBN     07270 Port 22 Device 10400 Remote 44 13331 AT Timer Expired
09-15-16 05:21:56 A:CCBE     07270 Port 22 Device 10400 Remote 44 13331 AT Timer Expired

这是我的脚本

logs = LOAD '/data/test_log.txt' USING PigStorge(' ') AS (date: chararray, time: chararray, task: chararray, line_error: int, error_message: chararray);
date = GROUP logs BY date;

counts = FOREACH date GENERATE COUNT($4) as count;

DUMP counts;

请注意,列之间只有一个空格,只有 3 到 4 列之间有五个空格。我尝试了上面的脚本,但它只适用于日期而不适用于最后一列 Error_message。我正在尝试获取此输出包:

(09-15-16,05:23:45,B:VVBN,09064,Port 22 Device 10400 Remote 44 13331 Link Up RP2016)
(09-15-16,05:23:44,A:QAWE,09064,Port 22 Device 10400 Remote 44 13331 Link Up RP2016)
:
:

我只需要考虑前四列,日志文件中的任何其他列将它们混合在第 5 列中。

获得所需输出的任何建议。

4

1 回答 1

1

您需要使用 piggybank 提供的 MyRegExLoader 来处理自定义日志文件。

  logs = LOAD '/data/test_log.txt' USING org.apache.pig.piggybank.storage.MyRegExLoader ('provide the regex ');
于 2016-10-01T07:09:31.223 回答