Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 用pig解析系统日志文件_Parsing_Hadoop_Apache Pig_Analytics_Latin - Fatal编程技术网

Parsing 用pig解析系统日志文件

Parsing 用pig解析系统日志文件,parsing,hadoop,apache-pig,analytics,latin,Parsing,Hadoop,Apache Pig,Analytics,Latin,我有下面的日志,试图通过指定的列1作为日期、2作为时间、3作为任务、4作为错误行、5作为错误消息来解析它 |1 | |2 | |3 | |4 | |5 | 09-15-16 05:23:45 B:VVBN 09064 Port 22 Device 10400 Remote 44 13331 Link Up RP20

我有下面的日志,试图通过指定的列1作为日期、2作为时间、3作为任务、4作为错误行、5作为错误消息来解析它

|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列之间只有五个空格。 我尝试了上面的脚本,但它只适用于日期,不适用于最后一列错误消息。 我正在尝试获取此输出包:

(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中混合它们。


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

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

  logs = LOAD '/data/test_log.txt' USING org.apache.pig.piggybank.storage.MyRegExLoader ('provide the regex ');

努鲁感谢这个问题,我不熟悉正则表达式,而这正是支撑我的原因。因为猪可以“吃任何东西”尝试将其作为一行加载,然后根据生成REGEX_EXTRACT正则表达式是处理文本文件的基本方法,因此值得使用大量在线材料(包括网站)进行练习,以便在浏览器中在线测试。