我想将数据帧写入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中工作,并具有以下配置:
将集群版本更改为5.5,这会导致Apache Spark 2.4.3也解决了该问题。
编辑:
我测试了版本1.4.0和1.4.1的cosmos连接器,但结果没有改变
答案 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.1
和6.2 Beta
。
根据下图所示的GitHub存储库Azure/azure-cosmosdb-spark
的README.md
的内容,您可能应该切换为使用最新的jar文件azure-cosmosdb-spark_2.4.0_2.11-1.4.0-uber.jar
。
Azure CosmosDB Spark
的Maven存储库已发布到1.4.1
版本,如下图。
Microsoft已将其发行版移至https://search.maven.org/#search%7Cga%7C1%7Cazure-cosmosdb-spark
答案 1 :(得分:0)
正如Peter所说-确保cosmosdb连接器是适用于spark版本的正确版本。 Azure CosmosDB for Databricks页面上的文档需要更新。改用它:https://github.com/Azure/azure-cosmosdb-spark/#working-with-the-connector