如何使用MongoSpark从数据框架更新分片集合?

时间:2017-09-07 10:14:41

标签: mongodb scala apache-spark

我正在使用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

谢谢!

1 个答案:

答案 0 :(得分:0)

https://jira.mongodb.org/browse/SPARK-147打开了一个错误,他们说它将在SparkMongo版本2.3.0中解决。

似乎目前没有这项工作的选择。