簡體   English   中英

使用 Spark 和 Scala 處理 json RDD 中的每個 json 記錄

[英]Process each json record in json RDD using Spark with Scala

我需要以下場景的幫助:

我將以以下 JSON 格式從 Kafka 獲取數據以激發流式傳輸

{"id" : 1 , "data" : "AFGH00101219"}
{"id" : 2 , "data" : "AFGH00101215"}
{"id" : 2 , "data" : "AFGH00101216"}
{"id" : 3 , "data" : "AFGH00101218"}

val messages= KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics)

現在我想處理消息中的每個 JSON 記錄,每個記錄又返回一組記錄。 請給我一些想法來完成以下任務。

val output = messages.map(row =>
{
//here I will get each json record. My doubt is how to extract id and data 
//filed values from row and store it into variables.
//Here I need to decode the data filed value which is in hexa decimal format 
//to decimal format.
}

提前致謝。 如果問題不清楚,請告訴我。

您可以使用Google GSON或任何 JSON 解析庫,我使用 Google GSON 如下解析我在 Spark 流中收到的 JSON 數據。

// loop each RDD 
lines.foreachRDD(rawRDD => {
    val rdd = rawRDD.filter(!_.isEmpty)
      .map(row => {
        val jobj = new Gson().fromJson(row, classOf[JsonObject])
        val id = jobj.getAsJsonObject("id").getAsString
        val data = jobj.getAsJsonObject("data").getAsString
        // Do something with id and data
      })
  })

另一種方式是從接收到的RDD創建一個Dataframe

lines.foreachRDD(rawRDD => {
  val rdd = rawRDD.filter(!_.isEmpty)
  val df = spark.read.json(rdd)
  df.show(false)
  })

這將從 rdd 創建一個數據框,如下所示,不,您可以將 id 和 data 用於任何其他轉換/操作。

+------------+---+
|data        |id |
+------------+---+
|AFGH00101219|1  |
|AFGH00101215|2  |
|AFGH00101216|2  |
|AFGH00101218|3  |
+------------+---+

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM