我可以在spark-mongo db连接器中使用复合分片键MongoShardedPartitioner吗?

时间:2017-11-12 00:12:25

标签: mongodb apache-spark

我是spark-mongo连接器2.0的新手。如果我的理解不正确,请纠正我。

我需要访问mongodb中的分片集合,并希望在read配置中设置复合分片键。我阅读了文档,它说:

shard key:分割集合数据的字段。该字段应编入索引并包含唯一值。

https://docs.mongodb.com/spark-connector/v2.0/configuration/#conf-mongoshardedpartitioner

分区器是MongoShardedPartitioner时,我可以使用复合分片键吗?我怎样才能做到这一点?

在mongodb中,您可以使用json设置复合分片键但不确定如何在spark-mongo read config中设置复合分片键。

我试图添加 {“partitioner” - > “MongoShardedPartitioner”,“shardKey” - > “”{“id”:1,“timestamp”:1}“”“到读取配置。 但是,我得到了java.lang.IllegalArgumentException:key $ gte的值不能为null。我猜这个异常是由不正确的shardkey引起的。

任何人都可以给我一些提示吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用复合分片键,但mongo-spark-connector只能使用一个字段名称。因此,密钥必须“包装”到单个字段中。

例如,假设您有一份文件:

{
  someField: 1.0,
  myShardKey: {
    id: 1.0,
    timestamp: 1
  }
}

“myShardKey”可以用作mongo-spark-connector中的分片键。但另一个要求是集合必须使用与分片键相同的字段。所以应该按如下方式创建集合:

db.createCollection('myCollection');
sh.shardCollection('someDatabase.myCollection', {
    "myShardKey" : 1.0
});