我尝试在安装了 Spark 2.4.8 的 Cloud Dataproc 集群 1.4 上运行我的 Spark/Scala 代码 2.3.0。我在读取 avro 文件时遇到错误。这是我的代码:
sparkSession.read.format("com.databricks.spark.avro").load(input)
此代码按预期失败。然后我添加了这个 dependency到我的 pom.xml
文件:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-avro_2.11</artifactId>
<version>2.4.0</version>
</dependency>
这使我的代码成功运行。这是我不明白的部分,我仍在我的代码中使用模块 com.databricks.spark.avro
。为什么添加 org.apache.spark.avro
依赖项解决了我的问题,知道我并没有真正在我的代码中使用它?
我原以为我需要将我的代码更改为如下内容:
sparkSession.read.format("avro").load(input)
最佳答案
这是历史性的产物,因为最初 Spark Avro 支持是由 Databricks 在其专有的 Spark Runtime 中添加为 com.databricks.spark.avro
格式,当时 Sark Avro 支持被添加到 open-源 Spark 为 avro
格式然后,为了向后兼容,保留了对 com.databricks.spark.avro
格式的支持 if spark.sql.legacy.replaceDatabricksSparkAvro.enabled
property is set to true
:
If it is set to true, the data source provider com.databricks.spark.avro is mapped to the built-in but external Avro data source module for backward compatibility.
关于scala - 为什么在我使用 com.databricks.spark.avro 时必须添加 org.apache.spark.avro 依赖才能在 Spark2.4 中读/写 avro 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70395056/