我是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引起的。
任何人都可以给我一些提示吗?谢谢。
答案 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
});