AWS Glue не может запустить соединение python снежинки, как в примере https://www.snowflake.com/blog/how-to-use-aws-glue-with-snowflake/

(Отправка следующей ветки, чтобы помочь другим пользователям Snowflake узнать, что будет работать с AWS Glue)


Я пытаюсь добиться соединения снежинки в моей работе с клеем AWS, как указано в примере на:

https://www.snowflake.com/blog/how-to-use-aws-glue-with-snowflake/

Я использую последние версии

  • искра-снежинка_2.12-2.5.2-искра_2.4
  • снежинка-jdbc-3.9.1
  • Версия Glue - Spark 2.4, Python 3 (версия Glue 1.0)

Но ошибка ниже:

py4j.protocol.Py4JJavaError: An error occurred while calling o75.load.
: java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
at net.snowflake.spark.snowflake.Parameters$MergedParameters.<init>(Parameters.scala:208)
at net.snowflake.spark.snowflake.Parameters$.mergeParameters(Parameters.scala:202)
at net.snowflake.spark.snowflake.DefaultSource.createRelation(DefaultSource.scala:59)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318)
at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:238)
at java.lang.Thread.run(Thread.java:748)

person Gavin Wilson    schedule 15.10.2019    source источник


Ответы (1)


Ответ №1: Возможно, я немного общий, но я склонен предполагать, что подобные ошибки вызваны несовместимостью версий. Какая у вас версия SCALA? Вот некоторая общая информация (может потребоваться нажать «Развернуть публикацию», чтобы увидеть все), которая может помочь в настройке:

Я считаю, что AWS Glue теперь поддерживает Spark 2.4.3, но он все еще довольно новый и, возможно, не так тщательно протестирован. Вы можете попробовать его или попробовать Spark 2.2.1 ниже, который, как мы знаем, поддерживает AWS Glue.

Мы знаем, что AWS Glue также поддерживает Spark 2.2.1, поэтому я собираюсь подробнее остановиться здесь. Первая ссылка - это документация о поддержке AWS Glue для этой версии, а вторая ссылка - это место, где вы можете загрузить эту версию коннектора искра-снежинка.

Я считаю, что для Spark 2.2.1 вам понадобится SCALA 2.11, который вы можете найти здесь:

Вы можете использовать последнюю версию драйвера JDBC снежинки, загруженную здесь:

Надеюсь это поможет. Сообщите нам, если ошибка не исчезнет.

Ответ №2: Я могу подключить и загрузить таблицу из базы данных снежинок в фрейм данных с помощью вашего предложения.

Я использую версию,

1) Spark 2.2, Python2, версия Glue (0.9)

2) искра-снежинка_2.11-2.2.1.jar

3) снежинка-jdbc-3.2.7

Но когда я делаю df.printschema (), все хорошо, но когда я делаю df.show (), он дает ошибку ниже:

Я также не могу сохранить этот фрейм данных в ведре s3.

py4j.protocol.Py4JJavaError: An error occurred while calling o75.showString.
: java.lang.NoClassDefFoundError: net/snowflake/client/jdbc/internal/snowflake/common/core/S3FileEncryptionMaterial
at net.snowflake.spark.snowflake.ConnectorSFStageManager.encMat$lzycompute(ConnectorSFStageManager.scala:203)
at net.snowflake.spark.snowflake.ConnectorSFStageManager.encMat(ConnectorSFStageManager.scala:201)
at net.snowflake.spark.snowflake.ConnectorSFStageManager.masterKey$lzycompute(ConnectorSFStageManager.scala:231)
at net.snowflake.spark.snowflake.ConnectorSFStageManager.masterKey(ConnectorSFStageManager.scala:230)
at net.snowflake.spark.snowflake.SnowflakeRDD.<init>(SnowflakeRDD.scala:60)
at net.snowflake.spark.snowflake.SnowflakeRelation.getRDDFromS3(SnowflakeRelation.scala:189)
at net.snowflake.spark.snowflake.SnowflakeRelation.buildScanFromSQL(SnowflakeRelation.scala:103)
at net.snowflake.spark.snowflake.pushdowns.querygeneration.QueryBuilder.toRDD(QueryBuilder.scala:81)
at net.snowflake.spark.snowflake.pushdowns.querygeneration.QueryBuilder.rdd$lzycompute(QueryBuilder.scala:28)
at net.snowflake.spark.snowflake.pushdowns.querygeneration.QueryBuilder.rdd(QueryBuilder.scala:28)
at net.snowflake.spark.snowflake.pushdowns.querygeneration.QueryBuilder$$anonfun$getRDDFromPlan$1.apply(QueryBuilder.scala:183)
at net.snowflake.spark.snowflake.pushdowns.querygeneration.QueryBuilder$$anonfun$getRDDFromPlan$1.apply(QueryBuilder.scala:182)
at scala.Option.map(Option.scala:146)
at net.snowflake.spark.snowflake.pushdowns.querygeneration.QueryBuilder$.getRDDFromPlan(QueryBuilder.scala:182)
at net.snowflake.spark.snowflake.pushdowns.SnowflakeStrategy.buildQueryRDD(SnowflakeStrategy.scala:35)
at net.snowflake.spark.snowflake.pushdowns.SnowflakeStrategy.apply(SnowflakeStrategy.scala:20)
at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:62)
at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:62)
at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:439)
at org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:92)
at org.apache.spark.sql.execution.QueryExecution.sparkPlan$lzycompute(QueryExecution.scala:84)
at org.apache.spark.sql.execution.QueryExecution.sparkPlan(QueryExecution.scala:80)
at org.apache.spark.sql.execution.QueryExecution.executedPlan$lzycompute(QueryExecution.scala:89)
at org.apache.spark.sql.execution.QueryExecution.executedPlan(QueryExecution.scala:89)
at org.apache.spark.sql.Dataset.withAction(Dataset.scala:2837)
at org.apache.spark.sql.Dataset.head(Dataset.scala:2150)
at org.apache.spark.sql.Dataset.take(Dataset.scala:2363)
at org.apache.spark.sql.Dataset.showString(Dataset.scala:241)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:280)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:214)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: net.snowflake.client.jdbc.internal.snowflake.common.core.S3FileEncryptionMaterial
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

Ответ № 2 Можете ли вы попробовать еще раз с более поздней версией драйвера JDBC?

Ответ №3 Спасибо, что изучили это. Мне удалось решить проблему с помощью следующей комбинации версий:

Spark 2.4, Python 3 (Glue version 1.0)
spark-snowflake_2.11-2.4.8.jar
snowflake-jdbc-3.6.12.jar

Ответ № 3 Благодарим вас за размещение версий, чтобы другие пользователи знали, что будет работать с AWS Glue.

person Gavin Wilson    schedule 15.10.2019