PySpark如何从datetime字符串中提取小时并统计各小时出现次数
PySpark 从日期时间字符串统计各小时记录数实现方案
完全不需要手动拆分日期和时间为独立字符串,PySpark提供了原生内置函数可以直接完成小时提取和统计,是更高效简洁的实现方式。
你的日期时间字符串是YYYY-MM-DD HH:MM:SS的标准格式,直接调用hour()函数即可提取0-23范围的小时值,不需要做字符串切割、类型拆分这类冗余操作。
具体实现代码
假设你的日期时间字符串列名为datetime_col,统计代码如下:
from pyspark.sql import functions as F # 直接提取小时后分组计数,按小时升序排序 hour_stat_df = df.withColumn("hour", F.hour("datetime_col")) \ .groupBy("hour") \ .count() \ .orderBy("hour")
如果你的数据里存在少量格式不规范的异常值,可以先显式指定格式转换为时间戳类型再提取小时,兼容性更强:
from pyspark.sql import functions as F hour_stat_df = df.withColumn( "hour", F.hour(F.to_timestamp("datetime_col", "yyyy-MM-dd HH:mm:ss")) ) \ .groupBy("hour") \ .count() \ .orderBy("hour")
为什么不推荐手动拆分字符串
手动用split()等字符串函数切割日期、时间片段再提取小时的方式,代码冗余度高,还需要额外处理空值、字符串转整数等边界问题,执行性能也远低于Spark优化过的原生日期时间函数,没有必要使用。
内容的提问来源于stack exchange,提问作者FutureDataScientist
相关产品推荐
相关产品推荐

