如何使用RDD在apache日志文件中标识会话?

时间:2018-09-24 21:32:53

标签: apache-spark mapreduce rdd

我是RDD编程和Spark世界的新手。我必须分析几个Apache日志文件。文件格式为:

10.10.6.90 - - 15/Aug/2016:23:59:20 -0500 "GET /ecf8427e/b443dc7f/71f28176/174ef735/1dd4d421 HTTP/1.0" 200 - "-" "-" 7 "10.10.1.231, 10.10.6.90" -
10.10.2.104 - - 15/Aug/2016:23:59:21 -0500 "GET /ecf8427e/b443dc7f/b3a60c78/43eb7b22?093915ed HTTP/1.0" 200 - "-" "-" 3 "10.10.1.231, 10.10.2.104" -
10.10.6.90 - - 15/Aug/2016:23:59:30 -0500 "GET /ecf8427e/b443dc7f/71f28176/174ef735/1dd4d421 HTTP/1.0" 200 - "-" "-" 6 "10.10.1.231, 10.10.6.90" -
10.10.6.90 - - 16/Aug/2016:00:00:25 -0500 "GET /ecf8427e/b443dc7f/71f28176/174ef735/1dd4d421 HTTP/1.0" 200 - "-" "-" 5 "10.10.1.231, 10.10.6.90" -
10.10.6.90 - - 16/Aug/2016:00:00:27 -0500 "GET /ecf8427e/b443dc7f/71f28176/174ef735/1dd4d421 HTTP/1.0" 200 - "-" "-" 5 "10.10.1.231, 10.10.6.90" -

现在,我想在此日志中找到会话数。会话的定义:每个会话仅占用1分钟。因此,上面的示例有2个会话。会话1-具有记录15 / Aug / 2016:23:59:20、15 / Aug / 2016:23:59:21、15 / Aug / 2016:23:59:30,因为所有3个都在15 / Aug / 2016:23:59:20-16 /八月/ 2016:00:00:20。会话2有2条记录-16 / Aug / 2016:00:00:25和16 / Aug / 2016:00:00:27。我还想知道每个会话的持续时间。对于session1 = 1 + 9 = 10秒。对于会话2 = 2秒。

现在,如何解决此问题?我已经通过应用各种映射功能并将其简化为以下状态来减少此问题:-

(71f28176,(9,CompactBuffer(1471305560, 1471305566, 1471305570, 1471305576, 1471305580, 1471305585, 1471305590, 1471305595, 1471305625)))

在上面的元组中,compactBuffer是以秒为单位的纪元时间,我需要从中找到会话。 71f28176是用户标识。 9是否。 71f28176的记录出现在日志中的次数。

0 个答案:

没有答案