我需要以下方案的帮助:
我将使用以下JSON格式从Kafka获取数据以激发流式传输
<tab>
现在我想从消息中处理每个JSON记录,每个记录依次返回记录集。请给我一些想法来完成以下任务。
{"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)
提前致谢。如果问题不明确,请告诉我。
答案 0 :(得分:0)
你可以使用Google GSON或任何JSON解析库,我曾使用如下的Google GSON来解析我在spark streaming中收到的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
创建一个Dataframelines.foreachRDD(rawRDD => {
val rdd = rawRDD.filter(!_.isEmpty)
val df = spark.read.json(rdd)
df.show(false)
})
这将从rdd创建一个数据帧,如下所示,不,您可以将id和数据用于任何其他转换/操作。
+------------+---+
|data |id |
+------------+---+
|AFGH00101219|1 |
|AFGH00101215|2 |
|AFGH00101216|2 |
|AFGH00101218|3 |
+------------+---+
我希望这有帮助!