簡體   English   中英

如何在 spark DataFrame 中將數據類型格式化為 TimestampType - Scala

[英]How to format datatype to TimestampType in spark DataFrame- Scala

我正在嘗試將列類型轉換為值格式為“11/14/2022 4:48:24 PM”的 Timestamptype。 但是,當我顯示結果時,我看到的值為 null。

這是我用來轉換時間戳字段的示例代碼。

val messages = df.withColumn("Offset", $"Offset".cast(LongType)).withColumn("Time(readable)", $"EnqueuedTimeUtc".cast(TimestampType)).withColumn("Body", $" Body".cast(StringType)).select("Offset", "Time(readable)", "Body")

顯示(消息)

4個在此處輸入圖像描述

有沒有其他方法可以嘗試避免 null 值?

您可以使用to_timestamp function 並顯式提供時間格式,而不是強制轉換為TimestampType ,如下所示:

import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
import spark.implicits._

val time_df = Seq((62536, "11/14/2022 4:48:24 PM"), (62537, "12/14/2022 4:48:24 PM")).toDF("Offset", "Time")

val messages = time_df
  .withColumn("Offset", $"Offset".cast(LongType))
  .withColumn("Time(readable)", to_timestamp($"Time", "MM/dd/yyyy h:mm:ss a"))
  .select("Offset", "Time(readable)")

messages.show(false)

+------+-------------------+
|Offset|Time(readable)     |
+------+-------------------+
|62536 |2022-11-14 16:48:24|
|62537 |2022-12-14 16:48:24|
+------+-------------------+
messages: org.apache.spark.sql.DataFrame = [Offset: bigint, Time(readable): timestamp]

要記住的一件事是,您必須設置一個 Spark 配置,以允許遺留時間解析器策略:

spark.conf.set("spark.sql.legacy.timeParserPolicy", "LEGACY")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM