我正在创建一个spark scala代码,我在其中从MQTT服务器读取连续流。 我正在以纱线集群模式运行我的工作。我想保存并将此流附加到HDFS中的单个文本文件中。
我将在每1秒后收到数据流。所以我需要将这些数据附加到HDFS中的单个文本文件中。
任何人都可以提供帮助。
答案 0 :(得分:2)
使用数据框和使用模式追加 这将在每次新记录到来时附加数据。
val sqlContext = new org.apache.spark.sql.SQLContext(context)
import sqlContext.implicits._
stream.map(_.value).foreachRDD(rdd => {
rdd.foreach(println)
if (!rdd.isEmpty()) {
rdd.toDF("value").coalesce(1).write.mode(SaveMode.Append).save("C:/data/spark/")
// rdd.saveAsTextFile("C:/data/spark/")
}
})
答案 1 :(得分:1)
@Amrutha J Raj
rdd.toDF("value").coalesce(1).write.mode(SaveMode.Append).json("C:/data/spark/")
这意味着RDD
将转换为DF
,并且我们使用了coalesce(1)
,因此如果您不使用它将只有一个文件,那么spark可能会生成多个文件,因此将只限制为一种,我们的写入模式为“追加”,因此它将追加到现有文件和inn json格式。