hive計算網頁停留時長

2021-09-07 12:51:52 字數 1716 閱讀 1857

hive表結構例如以下:

create table pv_user_info(

session_id string,

user_id string,

url string,

starttime bigint

);

主要就是這幾個字段實用。省略其它。

實現方式:userid和sessionid分組後並按時間降序排序,降序排序後。第一行就是該使用者最後一次瀏覽的網頁。最後一行是第一次瀏覽的網頁,第一行的starttime和第二行的starttime相減就是第二行停留時間。

這裡會有幾個誤差

使用者最後一次瀏覽的網頁時長:由於不知道用關閉瀏覽器的時間。所以沒辦法計算,就返回乙個特定的值吧,我這裡返回的是0。

跨天:任務是按天統計,還沒有第二天的資料,所以不考慮跨天。

連續點開多個網頁:按上面的實現方式就會有誤差。這是沒辦法的。

按產生日誌檔案的結果看。僅僅能用這樣的實現方式,除非專門寫個js記錄網頁停留時長(不知是否可行),那麼就不須要用hive了。

詳細實現:

1.要實現行與行之間的比較或算加減法hive sql是實現不了的,僅僅有自己定義函式udf

2.定義全域性變數,存上次瀏覽時間。sessionid。userid

3.第一次呼叫evaluate方法上次瀏覽時間肯定是空的。也就是說是使用者在這一天裡最後一次瀏覽網頁的時間,直接返回0即可了。

4.再次呼叫evaluate方法要推斷是不是同上一次呼叫evaluate方法是不是同乙個使用者同乙個會話。假設是的話就相減。

5.呼叫evaluate方法假設和上一次呼叫不是乙個使用者。說明這個網頁是還有乙個使用者最後一次瀏覽網頁的時間。直接返回0。

hiveudf**

import org.apache.hadoop.hive.ql.exec.udf;

public class calcudf extends udf

return 0l;

} else

return usetime;

} else

return 0l;

}} }

}

將**打成jar包。上傳到/home/hadoop/test/

進入hive命令列,執行:

add jar /home/hadoop/test/hiveudf.jar; // 加入jar包 

create temporary function calc as 'com.orange.hadoop.calcudf'; //建立函式

//最後執行hive sql

select session_id,user_id,url,starttime,

calc(starttime,user_id,session_id)

from

(select * from pv_user_info distribute by user_id,session_id sort by user_id,session_id ,starttime desc) t;

這是我的實現方式。有沒有更好的解決方式?

hive計算網頁停留時長

hive表結構例如以下 create table pv user info session id string,user id string,url string,starttime bigint 主要就是這幾個字段實用。省略其它。實現方式 userid和sessionid分組後並按時間降序排序,降...

統計頁面停留時間計算

一 頁面停留時間與 停留時間是如何計算出來的?我們想要知道的是 假如這個使用者從10 00開始訪問 對於page2而言,訪問時間是10 05 10 01,即4分鐘。接著訪問者來到了page3頁面,他發現改頁面無法滿足他的需求或是他要找的內容已在page3頁面找到。那麼接下來就是離開。那麼,這個訪問者...

PowerShell限制計算機使用時長

前兩天中午吃飯的時候,同事問在windows 下有沒有什麼辦法可以限制使用者使用計算機的時長,比如超過兩個小時,則不允許繼續使用,另一同事說網上有很多類似的軟體啊,超時了則不允許其繼續上網,同事說是想限制其不能再繼續使用計算機。我問是不是想限制你兒子玩遊戲啊,他說是。我想了想說這個不難,我給你寫個指...