我尝试使用mongodbspark连接器读取数据,并希望在一个键上对数据集进行分区,从mongod独立示例读取数据。我在看mongodbspark的文档,它提到了各种分区器类。我试着用 MongoSamplePartitioner
类,但它只在一个分区上读取。 MongoPaginateByCountPartitioner
类以及分区到固定的66个分区。甚至当我分别在这两种情况下配置“samplesperpartition”和“numberofpartitions”时也是这样。我需要使用通过Map创建的readconfig。我的代码:
SparkSession sparkSession = SparkSession.builder().appName("sampleRecords")
.config("spark.driver.host", "2g")
.config("spark.driver.host", "127.0.0.1")
.master("local[4]").getOrCreate();
Map<String, String> readOverrides = new HashMap<>();
readOverrides.put("uri", "mongodb://mongo-root:password@127.0.0.1:27017/importedDb.myNewCollection?authSource=admin");
readOverrides.put("numberOfPartitions", "16");
readOverrides.put("partitioner", "MongoPaginateByCountPartitioner");
ReadConfig readConfig = ReadConfig.create(readOverrides);
JavaSparkContext jsc = JavaSparkContext.fromSparkContext(sparkSession.sparkContext());
Dataset<Row> dataset = MongoSpark.load(jsc, readConfig).toDF();
System.out.println(dataset.count()); //24576
System.out.println(dataset.rdd().getNumPartitions()); //66
每次我在这里遗漏什么时,使用sample partitioner都会返回1个分区?请帮忙。
ps-我正在阅读24576条记录,mongod版本4.0.10,MongoSpark connector 2.3.1,Java8
编辑:我让它工作了,需要在Map中提供像partitioneroptions.samplesperpartition这样的属性。但我仍然面临一个问题,partitioneroptions.samplesperpartition:“1000”,在mongosamplepartitioner中只返回1个分区。有什么建议吗?
暂无答案!
目前还没有任何答案,快来回答吧!