繁体   English   中英

如何使用 spark-sql 从 kafka 读取和处理 JSON 事件?

[英]How can I use spark-sql to read and process a JSON event from kafka?

详细说明:希望使用结构化火花流实现 Scala 代码,使用 DataFrame 从 Kafka 读取 JSON 事件,并使用 spark-sql 操作数据/列并将其写入 hive?

使用 Scala 2.11/spark 2.2

我明白创建连接是直截了当的:

val df = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("subscribe", "topic1")
  .load()
df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
  .as[(String, String)]

如何处理 JSON 事件? 假设所有事件都具有相同的模式,我是否必须提供模式,如果是的话,它是如何完成的,还有,如果有办法推断模式是如何完成的?

如果我理解正确,然后创建一个tempView ,我如何在该视图上运行类似 sql 的查询?

您的系统需要编辑:自动系统将此帖子标记为重复,但不是。 在链接的问题中,OP 要求修复他现有代码的问题,一个(有效的)答案解决了 JSON 反序列化的问题。 我的问题与上述不同。 如果我的问题不清楚,请具体询问,我会尽力进一步澄清。 谢谢你。

假设所有事件都具有相同的模式,我是否必须提供模式,如果是的话,它是如何完成的,还有,如果有办法推断模式是如何完成的?

更好的一面,如果您知道架构,请提供架构。 您可以按如下方式创建架构:

val schema = new StructType().add( "Id",IntegerType).add( "name",StringType)

然后从Kafka读取数据并反序列化如下:

val data_df = df.select(from_json(col("value"), schema).as("data")).select("data.*")

您可以使用 data_df 创建临时视图。

data_df.createOrReplaceTempView("data_df")

现在您可以使用 spark sql 查询视图

spark.sql("select * from data_df").show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM