【问题标题】:pig udf to calculate time difference in weblogspig udf 计算博客中的时间差
【发布时间】:2013-02-02 11:58:06
【问题描述】:

是否有一个 Pig UDF 可以计算博客中的时间差?

假设我有以下格式的博客:

10.171.100.10 - - [12/Jan/2012:14:39:46 +0530] "GET /amazon/navigator/index.php
 HTTP/1.1" 200 402 "someurl/page1" "Mozilla/4.0 (
compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 3.0.4506
.2152; MS-RTC LM 8; .NET CLR 3.5.30729; .NET CLR 2.0.50727)"
10.171.100.10 - - [12/Jan/2012:14:41:47 +0530] "GET /amazon/header.php HTTP/1.1
" 200 4376 "someurl/page2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 3.0.450
6.2152; MS-RTC LM 8; .NET CLR 3.5.30729; .NET CLR 2.0.50727)"
10.171.100.10 - - [12/Jan/2012:14:44:15 +0530] "GET /amazon/navigator/navigator
.php HTTP/1.1" 200 912 "someurl/page3" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET
 CLR 3.0.4506.2152; MS-RTC LM 8; .NET CLR 3.5.30729; .NET CLR 2.0.50727)"

IP 为10.171.100.10 的用户访问了somurl/page1 at 12/Jan/2012:14:39:46(博客中的第一个条目)。下一位用户在12/Jan/2012:14:41:47 访问了someurl/page2。因此,用户在 page1 上停留了 2mts 1sec。同样,用户在 page2 上停留了 2mts 28 秒(14.44:15 - 14:41.47)。我不在乎用户在 page3 上停留了多长时间,因为我没有什么可以与之比较的。输出可以是:

10.171.100.10 someurl/page1 121 sec 
10.171.100.10 someurl/page2 148 sec etc ..

博客将有数百万行,IP 不一定按排序顺序。关于如何使用 Pig UDF 或任何其他技术进行此操作的任何建议?

【问题讨论】:

  • 你最终为此做了什么?

标签: hadoop user-defined-functions hive apache-pig hdfs


【解决方案1】:

我不知道默认情况下会使用以下行中的内容来生成某些内容的任何函数,因为序列是可变的,因此非常不可靠。

您必须编写自己的 UDF。要优化计算(如果您有数十亿行),您可能希望通过IPdateORDER,并通过IPGROUP 您的数据集,然后在每个 IP 上开始 MapReduce 作业(或 IP 组)以确保与特定 IP 对应的所有行都由同一节点处理。

另外,我建议您多考虑一下要使用哪些规则来计算在页面上花费的时间:用户何时仍处于活动状态以及用户何时返回?您最终可能会得到很长的时间范围。

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多