Python 为什么AWS Glue上的Spark XML会因AbstractMethodError而失败?
我有一个用Python编写的AWS粘合作业,它通过依赖jars路径拉入spark xml库。我使用的是spark-xml_2.11-0.2.0.jar。当我试图将数据帧输出为XML时,我得到一个错误。我使用的代码是: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/
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的最新版本