我的Spark应用程序启动了几个执行程序。 我有几个分区可以遍布我的执行程序。
在这些分区上使用map()时,我想使用MongoDB连接(MongoDB Java Driver)并从那里查询更多数据,处理这些数据并将其作为map()函数的输出返回。
我想为每个执行者创建一个连接。 然后,每个分区都应该访问此executor-local变量并使用它来查询数据。
为每个分区建立连接可能不是一个好主意。广播连接无法正常工作,因为它不可序列化(我认为?)。
总结一下:
答案 0 :(得分:1)
您应该使用MongoConnector
。
它将处理创建集合并由缓存支持,该缓存可有效地处理任何MongoClients的关闭。它是可序列化的,因此它可以是广播,它可以采用选项,readConfig或Spark上下文来配置连接的位置。
MongoConnector
使用贷款模式处理与MongoDB的基础连接的引用管理,并允许MongoClient
,MongoDatabase
或MongoCollection
级别的访问。