Pyspark 如何以小时而不是秒过滤时间戳?

Pyspark 如何以小时而不是秒过滤时间戳?,pyspark,timestamp,sampling,azure-databricks,Pyspark,Timestamp,Sampling,Azure Databricks,我有一个频率为0.5Hz的时间戳列,它会产生数百万行。我愿意通过每小时设置一个时间戳来减少数据量。i、 e 24特定日期的观测值。 我已经通过按年、月和日过滤数据来减少数据大小。但由于它仍然很大,我现在想把它减少到每小时一次 我正在开发Databricks,并使用PySpark实现同样的功能 我使用以下命令将数据大小从几年减少到一天 df=df.filter(df.Timestamp.between('2019-09-03 00:00:00','2019-09-04 00:00:00')) 谢谢

我有一个频率为0.5Hz的时间戳列,它会产生数百万行。我愿意通过每小时设置一个时间戳来减少数据量。i、 e 24特定日期的观测值。 我已经通过按年、月和日过滤数据来减少数据大小。但由于它仍然很大,我现在想把它减少到每小时一次

我正在开发Databricks,并使用PySpark实现同样的功能

我使用以下命令将数据大小从几年减少到一天

df=df.filter(df.Timestamp.between('2019-09-03 00:00:00','2019-09-04 00:00:00'))

谢谢你的帮助。 谢谢


您可以使用自定义项
替换
日期时间的
部分的
分钟
。可能不是最好的解决方案,但您可以这样做:

import pyspark.sql.functions as F
from pyspark.sql.types import TimestampType

date_replace_udf = F.udf(lambda date: date.replace(minute=0, second=0, microsecond=0),TimestampType())

df = df.withColumn("Timestamp", date_replace_udf(F.col("Timestamp")))

另一个参考:

是否要将数据聚合到小时数?@pissall是的,我确实要将数据聚合到小时数。聚合是什么?sum/avg/etc?@pissall实际上不是sum/avg类型的聚合。相反,我希望获取(聚合)每小时而不是每秒钟发生的值。例如:
时间戳经纬度
2019-09-03 00:00:00 132323-354545
2019-09-03 00:00:01 xxxx yyyy
2019-09-03 00:00:02 aaa
而不是我想要在
2019-09-03 00:00:00:00有值2019-09-03 01:00:00 2019-09-03 02:00:00
感谢您提供了一个快速解决方案,但它仍然返回数据帧,时间戳每秒钟而不是每小时更改一次。您能显示输出吗?请将其添加到您的问题中。@LavMehta您需要检查
fixed\u date
列。我正在编辑我的答案,请再次尝试更正,但现在我在Timestamp列下得到了“java.util.Gregori…”它并没有抛出错误,而这只是我在该列中看到的。请检查我在问题中添加的图像。