这种情况困扰了我一天多。非常感谢您的帮助。
这是输入数据的样子(行中可以有更多字段)
{"Code":"MNDF","Peak":"DF","ServiceTime":"6","TransactionTime":"6","sendTimestamp":"2018-07-02T07:39:25Z"}
其架构如下
root
|-- json: string (nullable = true)
但是,我只对3个字段感兴趣,并将它们映射到相应的数据类型。例如。代码转换为StringType,ServiceTime转换为DoubleType,sendTimestamp转换为TimestampType
我已经定义了这样的模式
val schema:StructType = StructType(Seq(
StructField("Code ", StringType, true),
StructField("ServiceTime", DoubleType, true),
StructField("sendTimestamp", TimestampType, true)))
这是我在代码中所做的
import session.sqlContext.implicits._
kafkaDF
.select(from_json($"json", schema).as("mobEvent"))
问题是,当我在架构中使用DoubleType或IntegerType时,将返回null的数据框。
Batch: 169
-------------------------------------------
+--------+
|mobEvent|
+--------+
| null|
| null|
| null|
printSchema产生的位置
root
|-- mobEvent: struct (nullable = true)
| |-- Code: string (nullable = true)
| |-- ServiceTime: double (nullable = true)
| |-- sendTimestamp: timestamp (nullable = true)
按如下所示在架构中使用StringType或TimesstampType时没有问题。
+------------+
| mobEvent|
+------------+
|[, MNDF, ...|
|[, RSTC, ...|
|[, SCTS, ...|
|[, SCTJ, ...|
printSchema产生的位置
root
|-- mobEvent: struct (nullable = true)
| |-- Code: string (nullable = true)
| |-- ServiceTime: string (nullable = true)
| |-- sendTimestamp: timestamp (nullable = true)
有什么想法吗?