我正在尝试使用Spark Structured Streaming处理来自Kafka的数据。摄取数据的代码如下:
val enriched = df.select($"value" cast "string" as "json")
.select(from_json($"json", schema) as "data")
.select("data.*")
ds
是一个DataFrame,其数据来自Kafka。
当我尝试读取为JSON以便进行更快速的查询时出现问题。来自org.apache.spark.sql.functions
from_json()
的函数强制要求架构。如果消息有不同的字段怎么办?
答案 0 :(得分:1)
作为@ zero323以及他或她引用的答案,你提出了一个相互矛盾的问题:当一个人不知道架构时,如何强加一个架构?当然不能。我认为使用开放式集合类型的想法是您的最佳选择。
最终,几乎可以肯定的是,您可以使用案例类来表示数据,即使这意味着使用了大量Option
s,需要解析的字符串以及需要查询的映射。投资于定义案例类的努力。否则,您的Spark作业基本上会有很多 ad hoc ,耗费大量时间。