【发布时间】:2018-11-09 10:39:15
【问题描述】:
假设我有以下 Mongo 文档:
{
"_id":1,
"age": 10,
"foo": 20
}
以及以下 Spark DataFrame df:
_id | val
1 | 'a'
2 | 'b'
现在我想将数据框中的val 附加到 Mongo 文档中......
使用MongoDB Spark connector,我可以通过“_id”附加使用默认更新逻辑,这意味着如果Spark数据帧和Mongo文档中的“_id”匹配,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。这个操作的 I/O 是什么?是否满载(阅读所有文件,然后 替换所有属性)还是有点聪明(比如阅读所有 文档,但仅附加“val”属性,而不是 替换整个文档)?
【问题讨论】:
标签: python mongodb apache-spark upsert