雖然我嘗試在Spark DataFrame中將字符串字段強制轉換爲TimestampType,但輸出值的精度爲微秒(yyyy-MM-dd HH:mm:ss.S
)。但我需要的格式是yyyy-MM-dd HH:mm:ss
即,不包括微秒精度。另外,我想在寫入實木複合地板文件時將其保存爲時間戳字段。 所以我的字段的數據類型應該是使用TimestampType格式yyyy-MM-dd HH:mm:ss
的時間戳格式化Spark中的TimestampType DataFrame-斯卡拉
我嘗試作爲
col("column_A").cast(TimestampType)
or
col("column_A").cast("timestamp")
投領域的時間戳。這些能夠將該字段投射到時間戳,但具有微秒精度。
任何人都可以幫助保存時間戳數據類型爲具有所需格式規格的實木複合地板文件。
編輯
輸入:
val a = sc.parallelize(List(("a", "2017-01-01 12:02:00.0"), ("b", "2017-02-01 11:22:30"))).toDF("cola", "colb")
scala> a.withColumn("datetime", date_format(col("colb"), "yyyy-MM-dd HH:mm:ss")).show(false)
+----+---------------------+-------------------+
|cola|colb |datetime |
+----+---------------------+-------------------+
|a |2017-01-01 12:02:00.0|2017-01-01 12:02:00|
|b |2017-02-01 11:22:30 |2017-02-01 11:22:30|
+----+---------------------+-------------------+
scala> a.withColumn("datetime", date_format(col("colb"), "yyyy-MM-dd HH:mm:ss")).printSchema
root
|-- cola: string (nullable = true)
|-- colb: string (nullable = true)
|-- datetime: string (nullable = true)
在上面,我們正在正確的時間戳格式,但是,當我們打印模式,日期時間字段的類型爲String,但我需要一個時間戳在這裏輸入。
現在,如果我試圖將該字段強制轉換爲時間戳,則該格式將設置爲微秒精度,這並非意圖。
scala> import org.apache.spark.sql.types._
import org.apache.spark.sql.types._
scala> val a = sc.parallelize(List(("a", "2017-01-01 12:02:00.0"), ("b", "2017-02-01 11:22:30"))).toDF("cola", "colb")
a: org.apache.spark.sql.DataFrame = [cola: string, colb: string]
scala> a.withColumn("datetime", date_format(col("colb").cast(TimestampType), "yyyy-MM-dd HH:mm:ss").cast(TimestampType)).show(false)
+----+---------------------+---------------------+
|cola|colb |datetime |
+----+---------------------+---------------------+
|a |2017-01-01 12:02:00.0|2017-01-01 12:02:00.0|
|b |2017-02-01 11:22:30 |2017-02-01 11:22:30.0|
+----+---------------------+---------------------+
scala> a.withColumn("datetime", date_format(col("colb").cast(TimestampType), "yyyy-MM-dd HH:mm:ss").cast(TimestampType)).printSchema
root
|-- cola: string (nullable = true)
|-- colb: string (nullable = true)
|-- datetime: timestamp (nullable = true)
我所期待是格式是在yyyy-MM-dd HH:mm:ss
,也是字段的數據類型事先是timestamp
感謝
你能提供樣本字符串字段嗎? –
@RameshMaharjan提供和編輯中的示例。 – SrinivasR
如果您投射時間戳毫秒,肯定會追加。所以如果你需要架構作爲時間戳,那麼你將不得不調整毫秒。如果你不想要毫秒,那麼把它保存爲字符串。 :) –