使用MongoDB后端的Spark Streaming

时间:2016-09-07 16:22:16

标签: mongodb apache-spark streaming

我需要读取将从遥测设备泵入云中位置的csv文件,并将相关数据存储到Mongodb商店。我使用Spark Streaming来读取新文件(它们每分钟到达,有时甚至更频繁)并使用MomgoDB-Spark连接器。问题是数据没有被加载到MomgoDB中。我在我的代码中添加了Dataframe的show()步骤,它们正在控制台上正确显示,这意味着Streaming应用程序正在按预期读取和处理文件。但是保存到MongoDB的最后一步没有发生。我的代码如下所示

reqdata.foreachRDD { edata =>
    import sqlContext.implicits._
    val loaddata = edata.map(w => EnergyData(w(0).toString,w(1).toString,w(2).toString)).toDF()
    loaddata.show()
    loaddata.printSchema(); 
    MongoSpark.save(loaddata.write.option("uri","mongodb://127.0.0.1:27017/storedata.energydata").mode("overwrite"))
}

ssc.start()

loaddata.show()功能正好显示数据。

我检查了Mongodb日志,发现了一些奇怪的行,比如

  

" 2016-09-07T08:12:30.109-0700我从127.0.0.1:55694#212接受了NETWORK [initandlisten]连接(现已打开3个连接)   2016-09-07T08:12:30.111-0700 I COMMAND [conn212] CMD:drop storedata.energydata"

现在,我不明白为什么Mongo会放弃这个系列。 任何帮助都将受到高度赞赏

1 个答案:

答案 0 :(得分:0)

我通过将保存模式更改为append

来自行解决
MongoSpark.save(loaddata.write.option("uri","mongodb://127.0.0.1:27017/storedata.energydata").mode("append"))