我有一个Kakfa主题,其中数据以JSON格式存储。我写了一个火花流代码,我想只将Kafka主题中的值保存到HDFS文件中。
这就是我的kafka主题中的数据的样子:
{"group_city":"\"Washington\"","group_country":"\"us\"","event_name":"\"Outdoor Afro Goes Ziplining\""}
下面是我写的代码。当我打印它时,我得到解析的JSON,但是当我尝试将值保存到文本文件时出现问题。
val dstream = KafkaUtils.createDirectStream[String, String](ssc,preferredHosts,ConsumerStrategies.Subscribe[String, String](topics, kafkaParams))
//___PRINTING RECORDS________
val output= dstream.foreachRDD { rdd =>
rdd.foreach { record =>
val values = record.value()
val tweet = scala.util.parsing.json.JSON.parseFull(values)
val map:Map[String,String] = tweet.get.asInstanceOf[Map[String, String]]
map.foreach(p => println(p._2))
}
}
答案 0 :(得分:1)
您可以使用saveAsTextFile
保存rdd,但由于您只想保存值,您可以将其转换为数据帧并写为csv
dstream.foreachRDD(rawRDD => {
// get the data
val rdd = rawRDD.map(_._2)
rdd.saveAsTextFile("file path")
// or read the json String to dataframe and write as a csv
spark.read.json(rdd).write.mode(SaveMode.Append).csv("path for output")
})
希望这有帮助!