2016-11-26 41 views
-1

我想要求以1小時的間隔平均查找一天中最繁忙的時間。帶時間的Spark請求

我在格式爲「%d /%b /%Y:%H:%M:%S」的數據框中顯示行日期。

我開始這樣的:

mostBusyTimeDF = logDF.groupBy("date") ... 

例如輸入:

   date 
2015-12-01 21:04:00 
2015-12-01 10:04:00 
2015-12-01 21:07:00 
2015-12-01 21:34:00 

在輸出:

   date   count(1 hour interval) 
2015-12-01 21:04:00       3 
2015-12-01 10:04:00       1 

我不知道以後我該怎麼辦呢..

你能幫我嗎?

非常感謝

+0

你能爲我們提供樣品的輸入和輸出?你想創建例如上午1點--10點的請求,上午2點 - 20點的請求等? –

+0

@T.Gawęda我編輯我的問題 – JackR

+0

計數應該只在給定小時內的第一個日期? –

回答

1

您可以使用內置的星火日期函數:

from pyspark.sql.functions import * 

logDF = sqlContext.createDataFrame([("2015-12-01 21:04:00", 1), ("2015-12-01 10:04:00", 2), ("2015-12-01 21:07:00", 9), ("2015-12-01 21:34:00", 1)], ['somedate', 'someother']) 

busyTimeDF = logDF.groupBy(year("somedate").alias("cnt_year"), \ 
    month("somedate").alias("cnt_month"), \ 
    dayofmonth("somedate").alias("cnt_day"), \ 
    hour('somedate').alias("cnt_hour")) \ 
     .agg(functions.count("*").alias("cntHour")) 

cond = [busyTimeDF.cnt_year == year(logDF.somedate), \ 
    busyTimeDF.cnt_month == month(logDF.somedate), \ 
    busyTimeDF.cnt_day == dayofmonth(logDF.somedate), \ 
    busyTimeDF.cnt_hour == hour(logDF.somedate)] 

busyTimeDF.join(logDF, cond).select('somedate', 'cntHour').show() 
+0

非常感謝我瞭解的所有人:) – JackR