任何Avro格式的文件写入尝试都会失败,堆栈跟踪如下。
我们正在使用Spark 2.4.3(使用用户提供的Hadoop)、Scala 2.12,并且我们在运行时使用任一Spark-shell加载Avro包:
org.apache.sparkavro_2
或spark提交:
提交org.apache.sparkavro_2
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")
... 产生相同的stacktrace错误(此副本来自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、ORC、parquet)。
我们使用HDFS(Hadoop v3.1.2)作为文件存储。
我已经尝试了Avro的不同软件包版本(例如2.11,更低),它们要么会引发相同的错误,要么完全由于不兼容而无法加载。所有Python、Scala(使用shell或Spark-提交)和Java(使用Spark-提交)都会出现此错误。
apache上似乎存在一个未解决的问题。但这已经一岁了,没有任何决议。我碰到了这个问题,但也想知道社区是否有解决方案?非常感谢您的帮助。
伙计,我遇到了与你相同的错误,但我将我的spark版本更新为2.11 2.4.4,问题消失了。
根据链接错误中的注释,您应该指定avro至少具有1.8.0
版本,如下所示:
spark-submit --packages org.apache.spark:spark-avro_2.12:2.4.3,org.apache.avro:avro:1.9.2 ...
(你可能也想尝试其他顺序。)
我在最新的Spark上也有同样的异常。当我将以下依赖项添加到pom中时,它消失了。
<properties>
....
<spark.version>3.1.2</spark.version>
<avro.version>1.10.2</avro.version>
</properties>
<dependencies>
....
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-avro_2.12</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>${avro.version}</version>
</dependency>
</dependencies>
在启动应用程序的类路径中,似乎确实缺少所需的依赖项。
我正试图使用FileWriter将一些文本写入文件。程序运行时不抛出任何异常,除了它应该抛出的异常(写入文件是抛出异常的一部分),但文件保留为空。该文件与包含异常的.java文件和抛出异常的.java文件位于同一目录中。 我正在正确地刷新和关闭FileWriter对象,它位于try/catch块中,该块应该打印代码遇到的任何异常,我尝试使用带有FileWriter作为参数的PrintWriter,
所以我使用了DataInputStream、FileInputStream、BufferInputStream、FileReader、BufferedReader、Scanner。它们都抛出FileNOtFoundException或CorruptedStreamException。
在用户任务上应用边界计时器事件,在服务任务上添加java类属性,但当计时器到期触发异常列表时,会抛出,即无法找到分配给服务任务的类。类存在于类路径上。activiti配置中还启用了asyncExecutorActivate属性 这里有一个代码 例外 Bean初始化
你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception): '''A u
当外部命令(如git)写入stderr时,PowerShell会生成NativeCommandError异常。我希望看到与标准UNIX/Linux系统类似的输出和stdout。这个脚本需要运行许多本机命令,如果可能的话,我更喜欢一个不给每个命令添加太多杂乱和维护的解决方案。 在Linux上,可以这样签出分支: 其中的微妙之处在于,最后一行是出于任何原因写入stderr的。但是,git的退出状态为零
我已经创建了一个解码器来处理客户端发送的字节。给你 并在客户端发送字节时抛出下一个错误 Io.netty.handler.codec.DecoderException:java.lang.IllegalArgumentException:MinimumReadableBytes:-603652096(预期:>=0)在io.netty.handler.codec.ReplayingDecoder.C