首页 > 解决方案 > 使用 Spark-CosmosDB 连接器将 Spark Dataframe 写入 Cosmodb (SQL Api) 时,无法在运行时在 cosmodb 中创建新的数据库和集合

问题描述

我正在使用 Apache Spark 2.3.2v。下面是我使用 Apache Spark 使用 CosmosDB 执行的用例。我正在使用azure-cosmosdb-spark_2.3.0_2.11_1.3.3连接器。

用例- 我在 spark 中执行一些复杂的聚合,我的数据在 CosmosDB(SQL) 中。我想从 Apache Spark 数据帧中的 CosmosDB 读取数据并执行一些复杂的聚合函数并写回 CosmosDB 存储在新的数据库和集合中,这将在运行时创建。

我能够成功地从 CosmosDB 读取数据并使用数据框执行我的功能。现在我想写回 CosmosDB 但在新数据库和新集合中。

下面是我从 CosmosDB 读取数据的代码 -

import com.microsoft.azure.cosmosdb.spark.schema._
import com.microsoft.azure.cosmosdb.spark._
import com.microsoft.azure.cosmosdb.spark.config.Config

val readConfig = Config(Map("Endpoint" -> "https://xyz.documents.azure.com:443/",
    "Masterkey" -> "",
    "Database" -> "Database1",
    "PreferredRegions" -> "",
    "Collection" -> "Collection1",
    "SamplingRatio" -> "1.0"))

val flights = spark.read.cosmosDB(readConfig)
    flights.count()   // performed complex aggrgate functions

下面是写回 CosmosDB(新数据库和集合)的代码 -

val writeConfig = Config(Map(
    "Endpoint" -> "https://xyz.documents.azure.com:443/",
    "Masterkey" ->"",
    "Database" -> "Database2",
    "PreferredRegions" -> "",
    "Collection" -> "Collection2",
    "WritingBatchSize" -> "100",
    "Upsert" -> "true"))

   flights.write.mode(SaveMode.Overwrite).cosmosDB(writeConfig)

当我尝试提供不同的数据库和新的集合名称(未在 cosmosDb 中创建)时,它总是给我以下异常

Exception in thread "main" com.microsoft.azure.documentdb.DocumentClientException: Message:      {"Errors":["Resource Not Found. Learn more: https:\/\/aka.ms\/cosmosdb-tsg-not-found"]}

我查看了许多链接,但所有链接都为数据库名称和集合名称提供了相同的读写操作。如果您需要任何输入,请告诉我。

询问 -

  1. 我可以使用 Spark-cosmos Db 连接器通过 Apache spark 在 CosmosDB 中创建数据库和集合吗?

请建议我任何解决方案。我是否需要构建一个与 .NET SDK 中类似的 API

标签: apache-sparkazure-cosmosdbazure-cosmosdb-sqlapi

解决方案


推荐阅读