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

Python 为什么AWS Glue上的Spark XML会因AbstractMethodError而失败?,python,apache-spark,apache-spark-sql,aws-glue,apache-spark-xml,Python,Apache Spark,Apache Spark Sql,Aws Glue,Apache Spark Xml,我有一个用Python编写的AWS粘合作业,它通过依赖jars路径拉入spark xml库。我使用的是spark-xml_2.11-0.2.0.jar。当我试图将数据帧输出为XML时,我得到一个错误。我使用的代码是: applymapping1.toDF().repartition(1).write.format(“com.databricks.xml”).save(“s3://glue.xml.output/Test.xml”) 我得到的错误是: “/mnt/thread/usercache/

我有一个用Python编写的AWS粘合作业,它通过依赖jars路径拉入spark xml库。我使用的是spark-xml_2.11-0.2.0.jar。当我试图将数据帧输出为XML时,我得到一个错误。我使用的代码是:

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

我得到的错误是:

“/mnt/thread/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/pyspark.zip/pyspark/sql/readwriter.py”, 第550行,保存文件中 “/mnt/warn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/py4j-0.10.4-src.zip/py4j/java_gateway.py”, 第1133行,在调用文件中 “/mnt/thread/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/pyspark.zip/pyspark/sql/utils.py”, 第63行,在deco文件中 “/mnt/warn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/py4j-0.10.4-src.zip/py4j/protocol.py”, 第319行,在get_return_值py4j.protocol.Py4JJavaError中:一个错误 调用o75.save时发生:java.lang.AbstractMethodError: 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.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

这个问题与同样处理
AbstractMethodError
的问题非常相似(但不是完全相同)


引用以下文件的javadoc:

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

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

我认为这是一个火花版本不匹配在这里发挥

给定堆栈跟踪中的
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的最新版本