web-dev-qa-db-ja.com

タイムスタンプタイプのPySparkデータフレームをその日に切り捨てるにはどうすればよいですか?

次のように、列にタイムスタンプを含む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

時間ではなく日に切り捨てるにはどうすればよいですか?

4
Jared

間違った機能を使用しています。 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|
# +-------------------+
17
Alper t. Turker

文字列操作でそれを行う簡単な方法の1つ:

from pyspark.sql.functions import lit, concat

df = df.withColumn('date', concat(df.date.substr(0, 10), lit(' 00:00:00'))) 
0
Ryan Widmaier