Я использую приложение Spark2 , которое использует следующую команду из com.mongodb.spark.MongoSpark для записи DataFrame в набор реплик с тремя узлами MongoDB :
//The real command is similar to this one, depending on options
//set to the DataFrame and the DataFrameWriter object about MongoDB configurations,
//such as the writeConcern
var df: DataFrameWriter[Row] = spark.sql(sql).write
.option("uri", theUri)
.option("database", theDatabase)
.option("collection", theCollection)
.option("replaceDocument", "false")
.mode("append")
[...]
MongoSpark.save(df)
Дело в том, что, хотя я уверен, что исходные данные, полученные из таблицы Hive, имеют уникальный первичный ключ , когда приложение Spark работает, я получаю ошибку дублирующегося ключа:
2019-01-14 13:01:08 ERROR: Job aborted due to stage failure: Task 51 in stage 19.0 failed 8 times,
most recent failure: Lost task 51.7 in stage 19.0 (TID 762, mymachine, executor 21):
com.mongodb.MongoBulkWriteException: Bulk write operation error on server myserver.
Write errors: [BulkWriteError{index=0, code=11000,
message='E11000 duplicate key error collection:
ddbb.tmp_TABLE_190114125615 index: idx_unique dup key: { : "00120345678" }', details={ }}].
at com.mongodb.connection.BulkWriteBatchCombiner.getError(BulkWriteBatchCombiner.java:176)
at com.mongodb.connection.BulkWriteBatchCombiner.throwOnError(BulkWriteBatchCombiner.java:205)
[...]
Я попытался установить записать озабоченность в "3" или даже "в большинство". Кроме того, тайм-аут был установлен на 4/5 секунд, но иногда эта ошибка повторяющегося ключа по-прежнему появляется.
Я хотел бы знать, как настроить загрузку, чтобы не получать повторяющиеся записи при записи в набор реплик.
Есть предложения? Заранее спасибо!