Почему 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 года.

Другие вопросы по тегам