我在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',在模式的情况下,我们有'时间:时间戳'。 因此,我们仍然必须将我们的时间字段放入时间戳中,然后再读取它:/ –