[英]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.