我有一个用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 回答
这个问题非常类似于(但不是完全相同的)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:您应该确保AWS Glue的Spark环境中的Spark版本与spark-xml匹配 . 最新版本的spark-xml 0.4.1 was released on 6 Nov 2016 .