Любая попытка записи в файл формата Avro завершается неудачно с трассировкой стека ниже.
Мы используем Spark 2.4.3 (с предоставленным пользователем Had oop), Scala 2.12, и мы загружаем пакет Avro во время выполнения с помощью spark-shell:
spark-shell --packages org.apache.spark:spark-avro_2.12:2.4.3
или spark-submit:
spark-submit --packages org.apache.spark:spark-avro_2.12:2.4.3 ...
Сеанс spark сообщает об успешной загрузке пакета Avro.
... в любом случае, в тот момент, когда мы пытаемся записать любые данные в формат avro, например:
df.write.format("avro").save("hdfs:///path/to/outputfile.avro")
или с помощью выбора:
df.select("recordidstring").write.format("avro").save("hdfs:///path/to/outputfile.avro")
... выдает ту же ошибку трассировки стека (эта копия из spark-shell):
java.lang.NoSuchMethodError: org.apache.avro.Schema.createUnion([Lorg/apache/avro/Schema;)Lorg/apache/avro/Schema;
at org.apache.spark.sql.avro.SchemaConverters$.toAvroType(SchemaConverters.scala:185)
at org.apache.spark.sql.avro.SchemaConverters$.$anonfun$toAvroType$1(SchemaConverters.scala:176)
at scala.collection.Iterator.foreach(Iterator.scala:941)
at scala.collection.Iterator.foreach$(Iterator.scala:941)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1429)
at scala.collection.IterableLike.foreach(IterableLike.scala:74)
at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
at org.apache.spark.sql.types.StructType.foreach(StructType.scala:99)
at org.apache.spark.sql.avro.SchemaConverters$.toAvroType(SchemaConverters.scala:174)
at org.apache.spark.sql.avro.AvroFileFormat.$anonfun$prepareWrite$2(AvroFileFormat.scala:119)
at scala.Option.getOrElse(Option.scala:138)
at org.apache.spark.sql.avro.AvroFileFormat.prepareWrite(AvroFileFormat.scala:118)
at org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:103)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:170)
at org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult$lzycompute(commands.scala:104)
at org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult(commands.scala:102)
at org.apache.spark.sql.execution.command.DataWritingCommandExec.doExecute(commands.scala:122)
at org.apache.spark.sql.execution.SparkPlan.$anonfun$execute$1(SparkPlan.scala:131)
at org.apache.spark.sql.execution.SparkPlan.$anonfun$executeQuery$1(SparkPlan.scala:155)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:152)
at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:127)
at org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:80)
at org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:80)
at org.apache.spark.sql.DataFrameWriter.$anonfun$runCommand$1(DataFrameWriter.scala:676)
at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:78)
at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:125)
at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:73)
at org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:676)
at org.apache.spark.sql.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:290)
at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:271)
at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:229)
Мы можем без проблем писать другие форматы (с разделителями текста, json, OR C, паркет).
Мы используем HDFS (имел oop v3.1.2) в качестве хранилища файлов.
Я экспериментировал с различными версиями пакета Avro (например, 2.11, ниже), который либо вызывает ту же ошибку, либо не загружается полностью из-за несовместимости. Эта ошибка возникает со всеми Python, Scala (с использованием shell или spark-submit) и Java (с использованием spark-submit).
Похоже, Open Issue on apache .org JIRA за это, но этому сейчас год без какого-либо разрешения. Я столкнулся с этой проблемой, но мне было интересно, есть ли у сообщества исправления? Любая помощь высоко ценится.