Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 数据流解析JSON并保存到文本文件:SparkStreaming_Apache Spark_Apache Kafka_Spark Streaming - Fatal编程技术网

Apache spark 数据流解析JSON并保存到文本文件:SparkStreaming

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

我有一个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写入


希望这有帮助

问题出在哪里?@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")
})