如何将时间戳类型的PySpark数据帧截断到当天?

Jar*_*red 1 apache-spark apache-spark-sql pyspark pyspark-sql

我有一个PySpark数据框,在列中包含时间戳(调用列'dt'),如下所示:

2018-04-07 16:46:00
2018-03-06 22:18:00
Run Code Online (Sandbox Code Playgroud)

当我执行:

SELECT trunc(dt, 'day') as day
Run Code Online (Sandbox Code Playgroud)

...我期望:

2018-04-07 00:00:00
2018-03-06 00:00:00
Run Code Online (Sandbox Code Playgroud)

但我得到了:

null
null
Run Code Online (Sandbox Code Playgroud)

我如何截断到一天而不是一小时?

hi-*_*zir 10

你使用错误的功能.trunc仅支持几种格式:

返回截断为格式指定单位的日期.

:param格式:'year','yyyy','yy'或'month','mon','mm'

date_trunc改为使用:

返回截断为格式指定单位的时间戳.

:param格式:'year','yyyy','yy','month','mon','mm','day','dd','hour','minute','second','week ', '25美分硬币'

例:

from pyspark.sql.functions import col, date_trunc

df = spark.createDataFrame(["2018-04-07 23:33:21"], "string").toDF("dt").select(col("dt").cast("timestamp"))

df.select(date_trunc("day", "dt")).show()
# +-------------------+                                                           
# |date_trunc(day, dt)|
# +-------------------+
# |2018-04-07 00:00:00|
# +-------------------+
Run Code Online (Sandbox Code Playgroud)