Почему Spark-XML на AWS Glue не работает с AbstractMethodError?
У меня есть задание AWS Glue, написанное на Python, которое использует библиотеку spark-xml (через путь зависимых jar-файлов). Я использую 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", строка 550, в файле сохранения " /py4j-0.10.4-src.zip/py4j/java_gateway.py", строка 1133, в файле вызова " /mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/pysp. py ", строка 63, в файле deco"/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/py4j-0.10.4-src.zip/py4j/protocol.py", строка 319, в py_tret.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/ искровые / SQL /Dataset;)Lorg/ Apache / искровые / 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 включен в среду Spark AWS Glue.
Есть предложения, что попробовать?
Я пробовал разные версии spark-xml:
spark-xml_2.11-0.2.0 spark-xml_2.11-0.3.1 spark-xml_2.10-0.2.0
1 ответ
Этот вопрос очень похож на (но не является точным дубликатом). Почему FlexibleSearch-Spark 5.5.0 выдает AbstractMethodError при отправке в кластер YARN? это также касается AbstractMethodError
,
Цитирование javadoc java.lang.AbstractMethodError:
Брошенный, когда приложение пытается вызвать абстрактный метод. Обычно эта ошибка отлавливается компилятором; эта ошибка может возникнуть только во время выполнения, если определение некоторого класса несовместимо изменилось с момента последней компиляции выполняемого в данный момент метода.
Это в значительной степени объясняет то, что вы испытываете (обратите внимание на часть, которая начинается с "эта ошибка может возникнуть только во время выполнения").
Я думаю, что это несоответствие версии Spark в игре здесь.
Дано com.databricks.spark.xml.DefaultSource15
в трассировке стека и изменения, которое делает следующее:
Удалите разделенный DefaultSource15 из-за совместимости в Spark 1.5+
Это удаляет
DefaultSource15
и объединить его вDefaultSource
, Это было отделено для совместимости в Spark 1.5+ . В master и spark-xml 0.4.x пропала поддержка 1.x.
Вы должны убедиться, что версия Spark в среде Spark AWS Glue соответствует spark-xml. Последняя версия spark-xml 0.4.1 была выпущена 6 ноября 2016 года.