我想请求以1小时的间隔平均找到当天最忙碌的时间。
我的数据框中的行日期格式为“%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)
您可以使用内置的Spark日期函数:
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()