pyspark 在spark sql中将毫秒四舍五入到秒

u0njafvf  于 2023-08-02  发布在  Spark
关注(0)|答案(3)|浏览(109)

在Azure Spark SQL中如何将毫秒舍入为秒?

Date_format: 2023-06-16T00:00:19.645 
desired_result should be: 2023-06-16T00:00:20

字符串
我试着在下面使用。但它没有给出正确的结果。

from_unixtime(unix_timestamp(timestamp("date_col"))/1000 ,"yyyy-MM-dd HH:mm:ss")

fjaof16o

fjaof16o1#

您可以通过使用这些内置函数来实现这一点。

  • unix_timestamp->获取epoch时间戳值
  • date_format->获取毫秒
  • concat(".",<int>)->将毫秒转换为十进制
  • round->舍入毫秒值
    Example:
spark.sql("set spark.sql.legacy.timeParserPolicy=LEGACY")
spark.sql("""select *,to_timestamp(unix_timestamp(ts) + round(concat(".",date_format(ts, "S")))) round_ts from (
  select timestamp('2023-06-16 00:00:19.645') as ts)a""").\
    show(10,False)

#+-----------------------+-------------------+
#|ts                     |round_ts           |
#+-----------------------+-------------------+
#|2023-06-16 00:00:19.645|2023-06-16 00:00:20|
#+-----------------------+-------------------+

字符串

lawou6xi

lawou6xi2#

您可以将时间戳增加1秒,然后使用DATE_TRUNC删除毫秒

q = """
SELECT
  ts,
  DATE_TRUNC('SECOND', ts + INTERVAL 1 SECOND) AS round_ts
FROM (
  SELECT TIMESTAMP('2023-06-16 00:00:19.645') AS ts
)
"""
spark.sql(q).show(10, False)

+-----------------------+-------------------+
|ts                     |round_ts           |
+-----------------------+-------------------+
|2023-06-16 00:00:19.645|2023-06-16 00:00:20|
+-----------------------+-------------------+

字符串

kb5ga3dv

kb5ga3dv3#

请也试试这个:

from_unixtime(round(unix_millis(timestamp('2023-06-16T23:59:59.999'))/1000) ,"yyyy-MM-dd HH:mm:ss")

字符串

相关问题