JsonData类似于{reId: "1",ratingFlowId: "1001",workFlowId:"1"}
,我使用程序如下:
case class CdrData(reId: String, ratingFlowId: String, workFlowId: String)
object StructuredHdfsJson {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("StructuredHdfsJson")
.master("local")
.getOrCreate()
val schema = Encoders.product[CdrData].schema
val lines = spark.readStream
.format("json")
.schema(schema)
.load("hdfs://iotsparkmaster:9000/json")
val query = lines.writeStream
.outputMode("update")
.format("console")
.start()
query.awaitTermination()
}
}
但是输出为null
,如下所示:
-------------------------------------------
Batch: 0
-------------------------------------------
+----+------------+----------+
|reId|ratingFlowId|workFlowId|
+----+------------+----------+
|null| null| null|
|null| null| null|
|null| null| null|
|null| null| null|
|null| null| null|
|null| null| null|
|null| null| null|
|null| null| null|
|null| null| null|
|null| null| null|
|null| null| null|
+----+------------+----------+
答案 0 :(得分:1)
Spark可能无法解析您的JSON。问题可能与空格(或JSON中的任何其他字符)有关。您应尝试清理数据并再次运行应用程序。
评论后编辑(供将来的读者使用): 键应放在引号内
修改2: 根据{{3}},键由字符串表示,每个字符串都应用引号引起来。 Spark使用Jackson解析器将字符串转换为对象