2016-11-26 40 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