如何使用from_json允许消息具有不同的字段?

时间:2017-03-30 14:50:13

标签: apache-spark apache-spark-sql spark-structured-streaming

我正在尝试使用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()的函数强制要求架构。如果消息有不同的字段怎么办?

1 个答案:

答案 0 :(得分:1)

作为@ zero323以及他或她引用的答案,你提出了一个相互矛盾的问题:当一个人不知道架构时,如何强加一个架构?当然不能。我认为使用开放式集合类型的想法是您的最佳选择。

最终,几乎可以肯定的是,您可以使用案例类来表示数据,即使这意味着使用了大量Option s,需要解析的字符串以及需要查询的映射。投资于定义案例类的努力。否则,您的Spark作业基本上会有很多 ad hoc ,耗费大量时间。