簡體   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