gpt4 book ai didi

azure - 写入 Cosmos 时阻止 Spark 序列化空字段

转载 作者:行者123 更新时间:2023-12-03 07:08:03 29 4
gpt4 key购买 nike

我有一个 Spark 笔记本,可以覆盖 Cosmos 中的文档。其中一些文档具有空字段,这些字段在保存到 Cosmos 时不会被序列化,而其他文档则具有这些字段的数据。当我将数据帧写回 Cosmos 时,我最终得到的文档具有空字段。

有没有办法不序列化该值为空的行的该列?

示例

Cosmos 中存在的文档:

{
"id": "7b354753-e817-41f5-848d-780dab44d179",
"pk": "20763ae4-8394-467d-ba3c-5ab363c40f90",
"documentType": "ExampleDocument",
"userId": "20763ae4-8394-467d-ba3c-5ab363c40f90",
"label": "Needs to be updated"
}

覆盖后的文档:

{
"id": "7b354753-e817-41f5-848d-780dab44d179",
"pk": "20763ae4-8394-467d-ba3c-5ab363c40f90",
"documentType": "ExampleDocument",
"userId": "20763ae4-8394-467d-ba3c-5ab363c40f90",
"label": "Updated With Spark",
"details": null
}

我仍然希望对 details 字段进行序列化,但仅限于该字段不为空的文档。

最佳答案

您可以在写入 cosmos db 时设置此配置:"spark.cosmos.serialization.inclusionMode"-> "NonNull" 点击此链接:cosmos spark configuration

请参阅下面的示例:

val someDF = {dataFrameToWriteInComosDB}
val CosmosDbContainerConfig = Map(
"spark.cosmos.accountendpoint" -> {yourCosmosDbEndpoint},
"spark.cosmos.accountkey" -> {yourMasterKey},
"spark.cosmos.database" -> {yourDatabase},
"spark.cosmos.container" -> {yourContainer},
"spark.cosmos.serialization.inclusionMode" -> "NonNull",
"spark.cosmos.write.strategy" -> "ItemOverwrite"
) ++ StandardThroughputControlConfig

someDF.write.format("cosmos.oltp").options(CosmosDbContainerConfig).mode("append").save()

关于azure - 写入 Cosmos 时阻止 Spark 序列化空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71056340/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com