由于内部框架的需要,我们希望为dataframe.filter()使用基于dynamic/string/sql的过滤器。这对于带有时区的时间戳来说是很棘手的。考虑以下内容:
dataframe.filter()
dataframe.filter("end_dt > '07-12-2023T00:00:00')
字符串我尝试过很多种技术,包括to_timestamp,cast .. as string和其他的,但是没有一种能做到这一点。
to_timestamp
cast .. as string
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 | # +-------------------+-------------------+--------+
字符串
1条答案
按热度按时间csga3l581#
您可以将时区添加到时间戳文本中,解析它,然后与UTC时间戳进行比较。
字符串