Допустим, у меня есть следующий документ Mongo:
{
"_id":1,
"age": 10,
"foo": 20
}
и следующий Spark DataFrame df
:
_id | val
1 | 'a'
2 | 'b'
, и теперь я хочу добавить val
изфрейм данных для документа Mongo ...
Используя соединитель MongoDB Spark , я могу использовать логику по умолчанию *1014* через добавление "_id", что означает, что "_id "в совпадениях между информационным фреймом Spark и документом Mongo, соединитель Mongo не будет создавать новый документ, а будет обновлять старый.
Но!Обновление в основном ведет себя как replace - если я сделаю следующее:
df
.write.format("com.mongodb.spark.sql.DefaultSource")
.mode("append")
.option('spark.mongodb.output.uri','mongodb://mongo_server:27017/testdb.test_collection')
.save()
Коллекция будет выглядеть так:
[
{
"_id":1,
"val": 'a'
},
{
"_id":2,
"val':'b'
}
]
, и я хотел бы получить это:
[
{
"_id":1,
"age": 10,
"foo": 20
"val": 'a'
},
{
"_id":2,
"val':'b'
}
]
Мои вопросы :
Есть ли способ (некоторая опция), чтобы заставить разъем Spark вести себя так,Я хочу это вести себя?
Конечно, я могу сначала прочитать документы из Mongo в Spark, обогатить их атрибутом «val» и записать / добавить обратно в Mongo.Что такое ввод / вывод этой операции?Это полная загрузка (чтение всех документов и затем замена всех атрибутов) или это несколько умно (например, чтение всех документов, но добавление только атрибута «val», а не замена всего документа)?