Apache spark 数据流解析JSON并保存到文本文件:SparkStreaming
我有一个Kakfa主题,其中数据以JSON格式存储。我已经编写了一个spark流代码,我只想将Kafka主题中的值保存到HDFS中的文件中 我的卡夫卡主题中的数据如下所示: {团体城市:\华盛顿\,团体国家:\美国\,活动名称:\Outdoor Afro Goes Zipling \} 下面是我写的代码。当我打印它时,我会得到解析后的JSON,但当我试图将值保存到文本文件时,问题就来了 val dstream=KafkaUtils.createDirectStream[String,String]ssc,preferredHosts,ConsumerStrategies.Subscribe[String,String]主题,kafkaParams //___打印记录________ val输出=dstream.foreachRDD{rdd=> rdd.foreach{record=> val values=record.value val tweet=scala.util.parsing.json.json.parseFullvalues val-map:map[String,String]=tweet.get.asInstanceOf[map[String,String]] map.foreachp=>printlnp.\u 2 } } 您可以使用saveAsTextFile保存rdd,但由于您只想保存值,因此可以将其转换为dataframe并作为csv写入Apache spark 数据流解析JSON并保存到文本文件:SparkStreaming,apache-spark,apache-kafka,spark-streaming,Apache Spark,Apache Kafka,Spark Streaming,我有一个Kakfa主题,其中数据以JSON格式存储。我已经编写了一个spark流代码,我只想将Kafka主题中的值保存到HDFS中的文件中 我的卡夫卡主题中的数据如下所示: {团体城市:\华盛顿\,团体国家:\美国\,活动名称:\Outdoor Afro Goes Zipling \} 下面是我写的代码。当我打印它时,我会得到解析后的JSON,但当我试图将值保存到文本文件时,问题就来了 val dstream=KafkaUtils.createDirectStream[String,String
希望这有帮助 问题出在哪里?@philantrovert我的意思是,如何解析上述数据流并将值保存到文本文件中。您可以使用rdd.saveAsTextFile直接将该rdd保存到文件中,或转换为dataframe并以追加模式写入文件。@Shankarkoirla是的Shankar您是对的。我这么做了,但是如果我按照你的建议去做,它会给我很多其他的信息。我只想保存JSON值。例如,当我执行rdd.saveAsTextFile时,它给出的结果是:ConsumerRecordtopic=forMe,partition=0,offset=306,timestamp=0,producer=null,key=null,value={group\u city:\New York\,group\u country:\us\,event\u name:\Tools For make Machine Learning more Reactive\我只想从上面的值字段,然后保存在一个fileHi Shankar,我感谢你的帮助,但我已经尝试过这个。如果我按照您的建议执行,这就是错误:value_2不是org.apache.kafka.clients.consumer.ConsumerRecord[String,String]的成员。您可以共享screeshot吗?或者你可以试试val rdd=rawRDD.map_uuz.value谢谢Shankar,我试过了,它给了我需要的值。还有一个问题,我正在做这个dstream.foreachRDDrawRDD=>{val rdd=rawRDD.map.\uwrdd.valuerdd.coalesce1.saveAsTextFile/user/abc/test。但是,这只输出最后一个卡夫卡偏移量,一段时间后,创建的文件变为空。有什么想法吗?这是因为它在每个批处理间隔内运行,并用新数据替换。因此它用空数据替换。您可以过滤rdd并写入只有非空的。如果你需要附加数据,你可以使用DataFrameScar。
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")
})