将Spark流数据写入并附加到HDFS中的文本文件中

时间:2017-02-08 12:52:28

标签: scala hadoop hdfs spark-streaming

我正在创建一个spark scala代码,我在其中从MQTT服务器读取连续流。 我正在以纱线集群模式运行我的工作。我想保存并将此流附加到HDFS中的单个文本文件中。

我将在每1秒后收到数据流。所以我需要将这些数据附加到HDFS中的单个文本文件中。

任何人都可以提供帮助。

2 个答案:

答案 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格式。