如何在pyspark中将timestamp列与任意timestamp格式字符串进行比较?

o2rvlv0m  于 5个月前  发布在  Spark
关注(0)|答案(1)|浏览(55)

由于内部框架的需要,我们希望为dataframe.filter()使用基于dynamic/string/sql的过滤器。这对于带有时区的时间戳来说是很棘手的。考虑以下内容:

dataframe.filter("end_dt > '07-12-2023T00:00:00')

字符串
我尝试过很多种技术,包括to_timestampcast .. as string和其他的,但是没有一种能做到这一点。

csga3l58

csga3l581#

您可以将时区添加到时间戳文本中,解析它,然后与UTC时间戳进行比较。

from datetime import datetime

spark.conf.set('spark.sql.session.timeZone', 'UTC')

lit_with_tz = F.lit('07-12-2023T00:00:00' + ' America/Los_Angeles')
cutoff = F.to_timestamp(F.lit(lit_with_tz), "dd-MM-yyyy'T'HH:mm:ss VV")

_data = [
    (datetime(2023, 12, 7, 7), ),
    (datetime(2023, 12, 7, 9), ),
]
df = spark.createDataFrame(_data, ['end_dt'])
cols = [
    'end_dt',
    cutoff.alias('cutoff'),
    (F.col('end_dt') > cutoff).alias('is_after')
]
df.select(cols).show(10, False)

# +-------------------+-------------------+--------+
# |end_dt             |cutoff             |is_after|
# +-------------------+-------------------+--------+
# |2023-12-07 07:00:00|2023-12-07 08:00:00|false   |
# |2023-12-07 09:00:00|2023-12-07 08:00:00|true    |
# +-------------------+-------------------+--------+

字符串

相关问题