¿Por qué es obligatorio añadir la dependencia org.apache.spark.avro para leer/escribir archivos avro en Spark2.4 si estoy utilizando com.databricks.spark.avro?
Intenté ejecutar mi código de Spark/Scala 2.3.0 en un clúster de Cloud Dataproc 1.4 donde está instalado Spark 2.4.8. Me encontré con un error relacionado con la lectura de archivos avro. Aquí está mi código:
sparkSession.read.format("com.databricks.spark.avro").load(input)
Este código falló como se esperaba. Luego agregué esta dependencia a mi archivo pom.xml
:
<dependency>
<groupid>org.apache.spark</groupid>
<artifactid>spark-avro_2.11</artifactid>
<version>2.4.0</version>
</dependency>
Esto hizo que mi código se ejecutara correctamente. Y esta es la parte que no entiendo, todavía estoy utilizando el módulo com.databricks.spark.avro
en mi código. ¿Por qué agregar la dependencia org.apache.spark.avro
resolvió mi problema, sabiendo que no la estoy usando realmente en mi código?
Esperaba tener que cambiar mi código a algo como esto:
sparkSession.read.format("avro").load(input)
davy.ai
La razón por la que agregar la dependencia
org.apache.spark.avro
resuelve el problema es porque esta biblioteca proporciona una versión compatible de la biblioteca Avro que es utilizada por Spark. Cuando usas el módulocom.databricks.spark.avro
en tu código, este depende de la biblioteca Avro para leer y escribir archivos Avro. Sin embargo, esta biblioteca puede no ser compatible con la versión de Spark que estás utilizando. Al agregar la dependenciaorg.apache.spark.avro
, estás asegurando que Spark utiliza una versión compatible de la biblioteca Avro para leer y escribir archivos Avro, lo cual permite que el módulocom.databricks.spark.avro
funcione correctamente. Por lo tanto, en realidad estás utilizandoorg.apache.spark.avro
de forma indirecta a través decom.databricks.spark.avro
.