4

我有一个用 Python 编写的 AWS Glue 作业,它引入了 spark-xml 库(通过 Dependent jars 路径)。我正在使用 spark-xml_2.11-0.2.0.jar。当我尝试将我的 DataFrame 输出到 XML 时,出现错误。我正在使用的代码是:

applymapping1.toDF().repartition(1).write.format("com.databricks.xml").save("s3://glue.xml.output/Test.xml");

我得到的错误是:

"/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/pyspark.zip/pyspark/sql/readwriter.py", line 550, in save File "/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001 /py4j-0.10.4-src.zip/py4j/java_gateway.py”,第 1133 行,通话中文件“/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/pyspark.zip/pyspark/sql/utils.py”,第 63 行,在 deco 文件“/mnt/yarn/usercache/root/appcache/application_1517883778”中container_1517883778506_0016_02_000001/py4j-0.10.4-src.zip/py4j/protocol.py”,第 319 行,在 get_return_value py4j.protocol.Py4JJavaError:调用 o75.save 时出错。: java.lang.AbstractMethodError: com.databricks.spark.xml.DefaultSource15.createRelation(Lorg/apache/spark/sql/SQLContext;Lorg/apache/spark/sql/SaveMode;Lscala/collection/immutable/Map;Lorg/apache /spark/sql/Dataset;)Lorg/apache/spark/sql/sources/BaseRelation; 在 org.apache.spark.sql.execution.datasources.DataSource.write(DataSource.scala:426) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.

如果我将其更改为 CSV,它可以正常工作:

applymapping1.toDF().repartition(1).write.format("com.databricks.csv").save("s3://glue.xml.output/Test.xml");

注意:使用 CSV 时,我不必导入 spark-xml。我认为 spark-csv 包含在 AWS Glue 的 Spark 环境中。

有什么建议可以尝试吗?

我尝试了各种版本的 spark-xml:

spark-xml_2.11-0.2.0 spark-xml_2.11-0.3.1 spark-xml_2.10-0.2.0

4

1 回答 1

0

这个问题非常类似于(但不完全重复)为什么 elasticsearch-spark 5.5.0 在提交到 YARN 集群时会给出 AbstractMethodError?这也处理AbstractMethodError.


引用java.lang.AbstractMethodError的 javadoc :

当应用程序尝试调用抽象方法时抛出。通常,这个错误会被编译器捕获;如果自上次编译当前执行的方法以来某些类的定义发生了不兼容的更改,则此错误只会在运行时发生。

这几乎解释了您的体验(注意以“此错误只能在运行时发生”开头的部分)。

我认为这是 Spark 版本的不匹配。

com.databricks.spark.xml.DefaultSource15在堆栈跟踪和执行以下操作的更改中给出:

由于 Spark 1.5+ 的兼容性,删除了分隔的 DefaultSource15

这将删除DefaultSource15并将其合并到DefaultSource. 这是为了在 Spark 1.5+ 中的兼容性而分开的。在 master 和 spark-xml 0.4.x 中,它放弃了 1.x 支持。

您应该确保 AWS Glue 的 Spark 环境中的 Spark 版本与 spark-xml 匹配。最新版本的 spark-xml 0.4.1于 2016 年 11 月 6 日发布

于 2018-07-18T09:20:10.997 回答