我需要读取将从遥测设备泵入云中位置的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会放弃这个系列。 任何帮助都将受到高度赞赏
答案 0 :(得分:0)
我通过将保存模式更改为append
:
MongoSpark.save(loaddata.write.option("uri","mongodb://127.0.0.1:27017/storedata.energydata").mode("append"))