在PySpark中的带时区的日期时间范围之间过滤,以获取木地板文件

问题描述

根据here的建议,我想知道如何使用PySpark过滤带时区的日期时间范围。

这是我的数据的样子:

美国广播公司(ABC),2020-06-22T19:17:16.428 + 0000

DEF,2020-06-22T19:17:16.435 + 0000

JKL,2020-06-22T19:17:16.468 + 0000

移动网络运营商,2020-06-22T19:17:16.480 + 0000

XYZ,2020-06-22T19:17:16.495 + 0000

在这种情况下,我只想提取毫秒数在400-450之间的记录。

试过这个但没用:

import pyspark.sql.functions as func
df = df.select(func.to_date(df.UpdatedOn).alias("time"))
sf = df.filter(df.time > '2020-06-22T19:17:16.400').filter(df.time < '2020-06-22T19:17:16.451')

解决方法

使用to_date会截断小时数,因此必须使用to_timestamp进行比较。

df.withColumn('date',to_timestamp('date')) \
  .filter("date between to_timestamp('2020-06-22T19:17:16.400') and to_timestamp('2020-06-22T19:17:16.451')") \
  .show(10,False)

+---+-----------------------+
|id |date                   |
+---+-----------------------+
|ABC|2020-06-22 19:17:16.428|
|DEF|2020-06-22 19:17:16.435|
+---+-----------------------+

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...