将Spark数据帧写入CosmosDB时出错

时间:2019-11-28 14:12:35

标签: apache-spark pyspark azure-cosmosdb databricks

我想将数据帧写入CosmosDB。

df_cosmos = spark.read.parquet('/some_dir/my_file.parquet') config = { 'endpoint': 'https://my-cool-endpoint.documents.azure.com:1337/', 'masterkey': 'my_secret', 'database': 'hello', 'collection': 'world', 'upset': 'True'} df_cosmos.write.format("com.microsoft.azure.cosmosdb.spark").options(**config).mode('append').save()

执行此操作将导致:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 198854.0 failed 4 times, most recent failure: Lost task 0.3 in stage 198854.0 (TID 3414976, 10.139.64.8, executor 7): java.lang.NoSuchMethodError: org.apache.spark.sql.execution.datasources.FilePartition.files()Lscala/collection/Seq;

如果我对数据框进行显式分区,例如 df_cosmos = df_cosmos.repartition(1),错误消失了。

我正在Databricks中工作,并具有以下配置:

  • cosmos连接器:azure_cosmosdb_spark_2_4_0_2_11_1_3_4_uber.jar
  • 集群版本6.1
  • Apache Spark:2.4.4
  • 斯卡拉:2.11

将集群版本更改为5.5,这会导致Apache Spark 2.4.3也解决了该问题。

编辑:

我测试了版本1.4.0和1.4.1的cosmos连接器,但结果没有改变

2 个答案:

答案 0 :(得分:0)

您似乎使用的是来自官方文档azure-cosmosdb-spark_2.4.0_2.11-1.3.4-uber.jar的Azure Cosmos DB Spark Connector for Spark 2.4的jar文件Azure Cosmos DB

恐怕这不适用于最新版本的Azure Databricks运行时,例如6.16.2 Beta

根据下图所示的GitHub存储库Azure/azure-cosmosdb-sparkREADME.md的内容,您可能应该切换为使用最新的jar文件azure-cosmosdb-spark_2.4.0_2.11-1.4.0-uber.jar

enter image description here

Azure CosmosDB Spark的Maven存储库已发布到1.4.1版本,如下图。

enter image description here

Microsoft已将其发行版移至https://search.maven.org/#search%7Cga%7C1%7Cazure-cosmosdb-spark

enter image description here

答案 1 :(得分:0)

正如Peter所说-确保cosmosdb连接器是适用于spark版本的正确版本。 Azure CosmosDB for Databricks页面上的文档需要更新。改用它:https://github.com/Azure/azure-cosmosdb-spark/#working-with-the-connector