The*_*0s3 4 mongodb apache-spark
来自Mongo提供的以下教程:
MongoSpark.save(centenarians.write.option("collection", "hundredClub").mode("overwrite"))
Run Code Online (Sandbox Code Playgroud)
我的理解是否正确,本质上发生的是 Mongo 首先删除集合,然后用新数据覆盖该集合?
我的问题是是否可以使用MongoSpark连接器来实际更新 Mongo 中的记录,
假设我的数据看起来像
{"_id" : ObjectId(12345), "name" : "John" , "Occupation" : "Baker"}
Run Code Online (Sandbox Code Playgroud)
然后我想做的是合并另一个具有更多详细信息的文件中的人的记录,即该文件看起来像
{"name" : "John", "address" : "1800 some street"}
Run Code Online (Sandbox Code Playgroud)
目标是更新 Mongo 中的记录,所以现在 JSON 看起来像
{"_id" : ObjectId(12345) "name" : "John" , "address" : 1800 some street", "Occupation" : "Baker"}
Run Code Online (Sandbox Code Playgroud)
现在事情是这样的,假设我们只想更新John,并且还有数百万条其他记录我们希望保持原样。
这里有几个问题,我将尝试将它们分解。
\n\n\n\n\n本质上发生的事情是 Mongo 首先删除集合,然后用新数据覆盖该集合?
\n
正确的是,从mongo-spark v2.x开始,如果您指定 mode overwrite,MongoDB Connector for Spark将首先删除集合,并将新结果保存到集合中。请参阅源代码片段以获取更多信息。
\n\n\n我的问题是是否可以使用 \xc2\xa0
\nMongoSpark\xc2\xa0 连接器来实际更新 Mongo 中的记录,
SPARK-66( v1.1+)上描述的补丁mongo-spark是,如果数据帧包含_id字段,则数据将被更新插入。这意味着任何具有相同_id值的现有文档都将被更新,并且_id集合中没有现有值的新文档将被插入。\xc2\xa0
\n\n\n然后我想做的是合并另一个具有更多详细信息的文件中的人的记录
\n
如上所述,您需要了解_id您的收藏的价值。步骤示例:
Person通过从集合中读取来检索John\ 的值来创建数据框 (A) _id。IE ObjectId(12345)。_id将的值合并ObjectId(12345)到您的数据框中(B - 来自具有更多信息的其他文件)。利用唯一的字段值连接两个数据帧(A 和 B)。overwrite模式。\n\n\n我们只想更新\xc2\xa0
\nJohn,并且还有数百万条其他记录我们希望保持原样。
在这种情况下,在合并两个数据帧之前,请从数据帧 B 中过滤掉任何不需要的记录(来自另一个文件的包含更多详细信息的记录)。另外,当您调用时save(),请指定模式append。
| 归档时间: |
|
| 查看次数: |
7852 次 |
| 最近记录: |