数据块 10.2 pyspark 3.2.0;如何根据另一个日期和整数(小时)列添加新的时间戳列?

DataBricks 10.2 pyspark 3.2.0; How Do I Add a New Timestamp Column Based on Another Date and Integer (Hours) Column?

在使用 pyspark 的 DataBricks notebook 中,我需要 create/add 基于现有日期列的新时间戳列,同时根据现有的 hours-bin 整数列向其添加小时 - 这是为了支持创建一个事件驱动的时间序列特性集,在这种情况下要求时间戳限制为日期和小时(没有分钟、秒等...)。我曾尝试使用基于字符串的 expr()date_add()、各种格式化字符串和 cast() 组合,但我遇到了一系列与列访问、解析问题等相关的令人抓狂的错误。完成此操作的最简单方法是什么?

在我看来,unix_timestamp是最简单的方法:

dfResult = dfSource.withColumn("yourNewTimestampColName",
   (unix_timestamp(col("yourExistingDateCol")) + 
   (col("yourExistingHoursCol")*3600)).cast("timestamp"))

其中 yourNewTimestampColName 表示您要添加的时间戳列的名称,yourExistingDateCol 表示必须在 dfSource 数据框中使用此名称的日期列,并且 yourExistingHoursCol 表示 integer-based 小时列,该列也必须在 dfSource 数据框中以该名称出现。

unix_timestamp() 方法以秒为单位添加日期,因此要添加小时,请将 yourExistingHoursCol 乘以 3,600 秒,要添加分钟,请乘以 60,要添加天,请乘以 3,600*24,等等。 ...

执行 display(dfResult) 应该显示 dfSource 数据框的 structure/content,其中包含名为 yourNewTimestampColName 的新列,其中包含请求的 date/hour 组合。