从spark定制mongo中的写操作

lh80um4z  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(552)

考虑到以下情况,如何使用spark向mongo写信:
如果存在文档,只需使用较新的值更新匹配的字段,如果缺少该字段,则添加新字段(replacedocument参数if false将更新匹配的记录,但不会添加新的不匹配字段,而如果设置为true,我的旧字段可能会丢失。)
我想保持一个数据字段为只读,例如有两个字段,first\u load\u date和updated\u on。首次加载日期永远不会更改,它是在mongo中创建记录的日期,更新日期是添加新字段或替换旧字段的日期。
如果缺少文档,请插入。
主要问题是replacedocument=true将导致较新行中不存在的旧字段丢失,而false将处理匹配但现在是较新的传入字段。
我使用的是mongo spark连接器2.4.1

df.write.format("mongo").mode("append").option("replaceDocument","true").option("database","db1").option("collection","my_collection").save()
nc1teljy

nc1teljy1#

我理解你在这里想要达到的目标:你可以使用以下方法:

(df
 .write
 .format("mongo")
 .mode("append")
 .option("ordered", "false")
 .option("replaceDocument", "false")
 .option("database", "db1")
 .option("collection", "my_collection")
 .save()
 )

replacedocument设置为 false 将帮助您保存旧记录并更新匹配的记录,同时您可以获得 BulkWriteException 其有序参数设置为 false 会有帮助的。

相关问题