我在Databricks筆記本星火SQL的斯卡拉API - TimestampType - 無編碼器發現org.apache.spark.sql.types.TimestampType
使用的Spark 2.1斯卡拉2.11究竟是什麼TimestampType?
TimestampType可以在這裏找到了SparkSQL的斯卡拉API
在:我們從SparkSQL's documentation這是官方的時間戳類型是TimestampType,這顯然是對的java.sql.Timestamp別名知道
我們使用模式和數據集API
時當解析{"time":1469501297,"action":"Open"}
from the Databricks' Scala Structured Streaming example
使用JSON模式 - >確定(我不喜歡用高雅的數據集API):
val jsonSchema = new StructType().add("time", TimestampType).add("action", StringType)
val staticInputDF =
spark
.read
.schema(jsonSchema)
.json(inputPath)
使用DataSet API - > KO:無編碼器發現TimestampType
從DBFS上databricks讀取事件時,創建事件類
import org.apache.spark.sql.types._
case class Event(action: String, time: TimestampType)
--> defined class Event
錯誤。
注意:在使用java.sql.Timestamp
的類型 「時間」
val path = "/databricks-datasets/structured-streaming/events/"
val events = spark.read.json(path).as[Event]
錯誤消息
java.lang.UnsupportedOperationException: No Encoder found for org.apache.spark.sql.types.TimestampType
- field (class: "org.apache.spark.sql.types.TimestampType", name: "time")
- root class:
隨着'java.sql.Timestamp'如果我們使用dataset.printSchema我們有'時間:long',在模式的情況下,我們有'時間:時間戳'。 因此,我們仍然必須將我們的時間字段放入時間戳中,然後再讀取它:/ –