我正在嘗試將列型別轉換為值格式為“11/14/2022 4:48:24 PM”的 Timestamptype。但是,當我顯示結果時,我看到的值為空。
這是我用來轉換時間戳欄位的示例代碼。
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個
有沒有其他方法可以嘗試避免空值?
uj5u.com熱心網友回復:
TimestampType您可以使用to_timestamp函式并顯式提供時間格式,而不是強制轉換為,如下所示:
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")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534826.html
上一篇:如何創建將流量轉發到kubernetesingress控制器(例如haproxyingress或nginxingress)的反向代理

