为什么在我使用 com.databricks.spark.avro 时必须向 Spark2.4 中的 read/write avro 文件添加 org.apache.spark.avro 依赖项?

Why is adding org.apache.spark.avro dependency is mandatory to read/write avro files in Spark2.4 while I'm using com.databricks.spark.avro?

我尝试在安装了 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 支持被添加到开源 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.