#java #mongodb #apache-spark #partition
#java #mongodb #apache-spark #раздел
Вопрос:
Я пытался прочитать данные с помощью MongoDB spark connector и хочу разделить набор данных по ключу, читая из автономного экземпляра mongoD. Я просматривал документ MongoDB spark, и в нем упоминаются различные классы разделителей. Я пытался использовать MongoSamplePartitioner
class, но он считывает только 1 раздел. MongoPaginateByCountPartitioner
класс также разделяет разделы на фиксированные 66 разделов. Это происходит даже тогда, когда я настраиваю «samplesPerPartition» и «numberOfPartitions» в обоих этих случаях соответственно. Мне нужно использовать readConfig, созданный с помощью map. Мой код:
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
Использование примера разделителя возвращает 1 раздел каждый раз
Я что-то здесь упускаю? Пожалуйста, помогите.
PS — я читаю 24576 записей, версия mongoD v4.0.10, mongo spark connector 2.3.1, java 8
Редактировать: я заставил его работать, нужно было указать такие свойства, как so partitionerOptions.samplesPerPartition на карте. Но я все еще сталкиваюсь с проблемой, partitionerOptions.samplesPerPartition: «1000», в MongoSamplePartitioner возвращает только 1 раздел. Есть предложения?
Ответ №1:
Количество разделов может быть настроено для MongoPaginateByCountPartitioner.
Предположим, что нам нужно настроить целевое количество разделов на 16… Пожалуйста, добавьте partitionerOptions.numberOfPartitions -> 16 в свойствах, а не только numberOfPartitions -> 16.