我使用spark的接收器API编写了spark mongoDB spark sreaming连接器:
mongoConnector.getCollection[D]() match {
case Success(collection) => {
collection.find().subscribe(new Observer[D]() {
var subscription: Option[Subscription] = None
override def onSubscribe(subscription: Subscription): Unit = {
subscription.request(Long.MaxValue)
}
override def onNext(result: D): Unit = {
store(result)
}
override def onError(e: Throwable): Unit = println(s"Error: $e")
override def onComplete(): Unit ={stop("ed")}
})
}case Failure(ex) => stop("Failed to connect to MongoDB", ex)}
}
我注意到方法onComplete
改变了一切。实际上,我的目标是从mongodb集合中以流方式读取数据。当我选择spark接收器的stop方法时,将一次又一次地读取数据,因此会得到很多重复,但是当我对onComplete方法使用print(“ msg”)时,将读取一个数据,但会在其中插入新数据作业启动后的集合将永远不会被读取。
您能给我打电话怎么让它读取数据吗?