【发布时间】:2021-11-27 23:55:03
【问题描述】:
我以这种方式创建我的 SparkSession 并注册 kryo 类:
val sparkConf = new SparkConf()
.setAppName("bd-dq-spark")
.set("spark.sql.adaptive.enabled", "true")
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.set("spark.kryo.registrationRequired", "true")
.set("spark.driver.host", "127.0.0.1")
.registerKryoClasses(Array(classOf[HeatSensorEvent], Class.forName("scala.Enumeration$Val"), Class.forName("cs.spark_implicits.Model$EventType$")))
val spark: SparkSession =
SparkSession.builder()
.master("local[*]")
.config(sparkConf)
.getOrCreate()
我这样定义我的案例类:
object Model {
type Timestamp = Long
case class HeatSensorEvent(
eventId: String,
sensorId: String,
deviceId: String,
eventType: EventType,
timestamp: Timestamp,
temperature: Double
)
object EventType extends Enumeration {
final type EventType = Value
val TEMPERATURE_CHANGE: EventType.Value = Value
}
}
我以这种方式准备我的假数据:
val heatSensorEventData = Seq(
HeatSensorEvent("123", "s1", "d1", TEMPERATURE_CHANGE, 1619555389, Double.box(85.41)),
HeatSensorEvent("234", "s1", "d1", TEMPERATURE_CHANGE, 1619555419, Double.box(60.41)),
HeatSensorEvent("345", "s1", "d1", TEMPERATURE_CHANGE, 1619556389, Double.box(60.41)),
HeatSensorEvent("567", "s1", "d1", TEMPERATURE_CHANGE, 1619557389, Double.box(50.41))
)
我的主要内容是:
def main(args: Array[String]): Unit = {
implicit val heatSensorEventEncoder: Encoder[HeatSensorEvent] = org.apache.spark.sql.Encoders.kryo[HeatSensorEvent]
implicit val eventTypeEncoder: Encoder[EventType] = org.apache.spark.sql.Encoders.kryo[EventType.EventType]
val heatSensorEventDs: Dataset[HeatSensorEvent] = spark
.createDataset(heatSensorEventData).as[HeatSensorEvent]
heatSensorEventDs.show
heatSensorEventDs.printSchema()
}
但我得到的只是这个:
+--------------------+
| value|
+--------------------+
|[27 01 01 64 B1 0...|
|[27 01 01 64 B1 0...|
|[27 01 01 64 B1 0...|
|[27 01 01 64 B1 0...|
+--------------------+
root
|-- value: binary (nullable = true)
我的问题是为什么我丢失了所有架构并且无法显示正常数据?我该如何解决这个问题?
【问题讨论】:
标签: scala apache-spark apache-spark-sql apache-spark-dataset