如何使用 from_json 允许消息具有不同的字段?
How to use from_json to allow for messages to have different fields?
我正在尝试使用 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()
的函数要求必须提供架构。如果消息有一些不同的字段怎么办?
正如@zero323 和他或她引用的答案所暗示的那样,您在问一个矛盾的问题:本质上,当一个人不知道模式时,如何强加一个模式?当然不能。我认为使用开放式集合类型的想法是您的最佳选择。
但最终,几乎可以肯定的是,您可以使用大小写 class 表示您的数据,即使这意味着使用大量 Option
、需要解析的字符串和映射你需要审问。努力定义这种情况 class。否则,您的 Spark 作业本质上将是大量 临时、耗时的繁忙工作。
我正在尝试使用 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()
的函数要求必须提供架构。如果消息有一些不同的字段怎么办?
正如@zero323 和他或她引用的答案所暗示的那样,您在问一个矛盾的问题:本质上,当一个人不知道模式时,如何强加一个模式?当然不能。我认为使用开放式集合类型的想法是您的最佳选择。
但最终,几乎可以肯定的是,您可以使用大小写 class 表示您的数据,即使这意味着使用大量 Option
、需要解析的字符串和映射你需要审问。努力定义这种情况 class。否则,您的 Spark 作业本质上将是大量 临时、耗时的繁忙工作。