gpt4 book ai didi

substring - pyspark 子串和聚合

转载 作者:行者123 更新时间:2023-12-04 12:49:12 24 4
gpt4 key购买 nike

我是 Spark 的新手,我有一个包含此类数据的 csv 文件:

date,            accidents, injured
2015/20/03 18:00 15, 5
2015/20/03 18:30 25, 4
2015/20/03 21:10 14, 7
2015/20/02 21:00 15, 6

我想按事件发生的特定时间汇总这些数据。我的想法是将日期子串化为 'year/month/day hh',没有分钟,这样我就可以将它作为一个键。我想给出每小时事故和受伤的平均数。也许 pyspark 有一种不同的、更聪明的方法?

谢谢大家!

最佳答案

好吧,我想这取决于你之后要做什么。

最简单的方法是按照您的建议进行:对日期字符串进行子字符串化,然后进行聚合:

data = [('2015/20/03 18:00', 15, 5), 
('2015/20/03 18:30', 25, 4),
('2015/20/03 21:10', 14, 7),
('2015/20/02 21:00', 15, 6)]
df = spark.createDataFrame(data, ['date', 'accidents', 'injured'])

df.withColumn('date_hr',
df['date'].substr(1, 13)
).groupby('date_hr')\
.agg({'accidents': 'avg', 'injured': 'avg'})\
.show()

但是,如果您以后想要进行更多计算,您可以将数据解析为 TimestampType(),然后从中提取日期和小时。

import pyspark.sql.types as typ
from pyspark.sql.functions import col, udf
from datetime import datetime

parseString = udf(lambda x: datetime.strptime(x, '%Y/%d/%m %H:%M'), typ.TimestampType())
getDate = udf(lambda x: x.date(), typ.DateType())
getHour = udf(lambda x: int(x.hour), typ.IntegerType())

df.withColumn('date_parsed', parseString(col('date'))) \
.withColumn('date_only', getDate(col('date_parsed'))) \
.withColumn('hour', getHour(col('date_parsed'))) \
.groupby('date_only', 'hour') \
.agg({'accidents': 'avg', 'injured': 'avg'})\
.show()

关于substring - pyspark 子串和聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41526705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com