为什么在我使用 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.
我尝试在安装了 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.