scala - 为什么在我使用 com.databricks.spark.avro 时必须添加 org.apache.spark.avro 依赖才能在 Spark2.4 中读/写 avro 文件?

标签 scala apache-spark google-cloud-dataproc 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 支持被添加到 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/

相关文章:

python - 带有 case 语句的 for 循环

java - leftOuterJoin JavaPairRDD<Integer, Integer> 和 JavaPairRDD<Integer, Map<Integer, Integer>>

jupyter-notebook - 在 Jupyter Notebook 中运行的审核命令

Scala future 基础知识

scala - 如何将域模型设置为参与者?

Java/Scala 反射 : Get class methods in order and force object init

java - 产生交互过程

java - Spark 平面 map 函数抛出 "OutOfMemory"

python - 在 Dataproc 集群中查找 Hadoop 流媒体 jar

google-cloud-platform - 将 Google Dataproc 查询的输出重定向到文本文件