次のように、列にタイムスタンプを含むPySparkデータフレームがあります(列を「dt」と呼びます)。
2018-04-07 16:46:00
2018-03-06 22:18:00
私が実行するとき:
SELECT trunc(dt, 'day') as day
...私は期待しました:
2018-04-07 00:00:00
2018-03-06 00:00:00
しかし、私は得ました:
null
null
時間ではなく日に切り捨てるにはどうすればよいですか?
間違った機能を使用しています。 trunc
はいくつかの形式のみをサポートします :
形式で指定された単位に切り捨てられた日付を返します。
:param format: '年'、 'yyyy'、 'yy'または '月'、 'mon'、 'mm'
使用する - date_trunc
代わりに :
形式で指定された単位に切り捨てられたタイムスタンプを返します。
:param format: 'year'、 'yyyy'、 'yy'、 'month'、 'mon'、 'mm'、 'day'、 'dd'、 'hour'、 'minute'、 'second'、 'week '、'四半期 '
例:
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|
# +-------------------+
文字列操作でそれを行う簡単な方法の1つ:
from pyspark.sql.functions import lit, concat
df = df.withColumn('date', concat(df.date.substr(0, 10), lit(' 00:00:00')))