我正在使用MongoSpark scala连接器加载集合,在spark中处理它,我想用结果更新相同的集合。
我有一个结构的数据框:
root
|-- _id: struct (nullable = true)
| |-- oid: string (nullable = true)
|-- provider: string (nullable = true)
|-- solution: string (nullable = true)
_id和provider是mongo中的分片键,但当我使用:
运行更新时MongoSpark
.write(df_update)
.option("uri","mongodb://127.0.0.1/")
.option("database", "test")
.option("collection", "solutions")
.option("replaceDocument", "false")
.mode("append").save()
我明白了:
Write errors: [BulkWriteError{index=0, code=61, message='upsert { q: { _id: ObjectId('57ebd3d227e9c712d83737c9') }, u: { $set: { provider: "someProvider", solution: "blahblahblah" } }, upsert: true } does not contain shard key for pattern { provider: 1.0 }', details={ }}]
看起来mongospark没有使用provider
作为查询的一部分,因此我得到了碎片错误...
有没有办法强制mongospark使用X列查询和Y列更新?
我正在使用mongo 3.4.7和spark 2.2.0
谢谢!
答案 0 :(得分:0)
在https://jira.mongodb.org/browse/SPARK-147打开了一个错误,他们说它将在SparkMongo版本2.3.0中解决。
似乎目前没有这项工作的选择。