24 小时制 from_unixtime

24h clock with from_unixtime

我需要将带有 Unixtime/LongType 时间戳列的数据帧转换为实际的 TimestampType

根据epochconverter.com

但是,当我在数据帧上使用 from_unixtime 时,我得到一个 12 小时制的时钟,出于某种原因它基本上从我的第二个时间戳中减去 12 小时?我如何告诉 PySpark 使用 24 小时时钟?

下面代码的输出是:

+---+----------+-------------------+
|id |mytime    |mytime_new         |
+---+----------+-------------------+
|ABC|1646732321|2022-03-08 10:38:41|
|DFG|1646768324|2022-03-08 08:38:44|
+---+----------+-------------------+

第二行应该是2022-03-08 20:38:44.

可重现的代码示例:

data = [
    ("ABC", 1646732321)
    ,
    ("DFG", 1646768324)
]
schema = StructType(
            [
                StructField("id", StringType(), True),
                StructField("mytime", LongType(), True),
            ]
        )
df = spark.createDataFrame(data, schema)
df = df.withColumn(
                "mytime_new",
                from_unixtime(df["mytime"], "yyyy-MM-dd hh:mm:ss"),
            )
df.show(10, False)

3 分钟后发现我的错误...问题是我的 timestamp-format 小时字符串 (hh):

而不是:

from_unixtime(df["mytime"], "yyyy-MM-dd hh:mm:ss"),

我需要:

from_unixtime(df["mytime"], "yyyy-MM-dd HH:mm:ss"),