将日期列转换为时间戳列的最有效方法 + 一个小时

Most efficient way of transforming a date column to a timestamp column + an hour

我想知道是否有比我目前使用的方法更好的方法将日期列转换为日期时间列 + 1 小时。

这是我的数据框:

df = sc.parallelize([
    ['2019-08-29'],
    ['2019-08-30'],
    ['2019-09-1'],
    ['2019-09-2'],
    ['2019-09-4'],
    ['2019-09-10']
]).toDF(['DATE']).withColumn('DATE',col('DATE').cast('date'))

我的代码:

df1 = df.withColumn(
    'DATETIME', 
    ((col('DATE').cast('timestamp').cast('long')+3600)).cast('timestamp')
)

给出输出:

+----------+-------------------+
|      DATE|           DATETIME|
+----------+-------------------+
|2019-08-29|2019-08-29 01:00:00|
|2019-08-30|2019-08-30 01:00:00|
|2019-09-01|2019-09-01 01:00:00|
|2019-09-02|2019-09-02 01:00:00|
|2019-09-04|2019-09-04 01:00:00|
|2019-09-10|2019-09-10 01:00:00|
+----------+-------------------+

有谁知道更有效的方法吗?转换为时间戳两次似乎有点笨拙。

非常感谢。

你可以使用这样的东西:

from pyspark.sql.functions import expr
df1 = df.withColumn('DATETIME', 
     col('DATE').cast('timestamp')+ expr('INTERVAL 1 HOURS'))

然后您可以阅读有关间隔语法的更多信息,例如 following blog post from Databricks