使用 Spark 流式传输(用 Scala 编写)来读取来自Kafka的消息。 消息都是Json格式的字符串。
在局部变量expectedSchema
中定义预期的架构
然后将RDD中的字符串解析为Json
spark.sqlContext.read.schema(schema).json(rdd.toDS())
问题: Spark会处理所有记录/行,只要它有一些我尝试读取的字段,即使输入行的实际Json格式(即架构)(String) )与我的expectedSchema
不匹配。
假设期望的架构看起来像这样(在Json中):{"a": 1,"b": 2, "c": 3}
输入行如下所示:{"a": 1, "c": 3}
Spark将处理输入而不会失败。
我尝试使用此处描述的解决方案:How do I apply schema with nullable = false to json reading
但是assert(readJson.schema == expectedSchema)
永远不会失败,即使我故意发送带有错误Json架构的输入行。
我有办法验证给定输入行的实际架构是否符合我预期的架构?
我有没有办法在“损坏”架构行中缺少“填充”字段的空值?