首页 文章

为什么AWS Glue上的Spark-XML因AbstractMethodError而失败?

提问于
浏览
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/yubecache/root/appcache/application_1517883778506_0016/container_1517883778506 02_000001/pyspark.zip/pyspark/sql/readwriter.py”,第550行,在保存文件中“/ mnt / yarn / usercache / root / appcache / application_1517883778506_0016 / container_1517883778506 02_000001 / py4j-0.10.4-src.zip / py4j / java_gateway.py“,第1133行,在调用文件中”/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506 02_000001/pyspark.zip/pyspark/sql/utils py”为63行,在装饰文件 “/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506 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 /阿帕奇/火花/ SQL / SQLContext; Lorg /阿帕奇/火花/ SQL / SaveMode; Lscala /收集/不变/ Map ; Lorg /阿帕奇/火花/ SQL /数据集;)Lorg /阿帕奇/火花/ SQL /来源/ BaseRelation;在org.apache.spark.sql.execution.datasources.DataSource.write(DataSource.scala:426)在org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:215)在

如果我将其更改为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

1 回答

  • 0

    这个问题非常类似于(但不是完全相同的)Why does elasticsearch-spark 5.5.0 give AbstractMethodError when submitting to YARN cluster?,它也涉及 AbstractMethodError .


    引用java.lang.AbstractMethodError的javadoc:

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

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

    我觉得这里的Spark版本不匹配 .

    给定堆栈跟踪中的 com.databricks.spark.xml.DefaultSource15 和执行以下操作的the change

    由于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 was released on 6 Nov 2016 .

相关问题