Связь от Искры к Снежинке

Я пишу это не для того, чтобы задать вопрос, а чтобы поделиться знаниями. Я использовал Spark для подключения к Snowflake. Но я не мог получить доступ к снежинке. Похоже, что что-то не так с внутренним драйвером JDBC в блоках данных.

Это была ошибка, которую я получил.

java.lang.NoClassDefFoundError:net/snowflake/client/jdbc/internal/snowflake/common/core/S3FileEncryptionMaterial

Я перепробовал много версий драйверов jdbc для снежинок и драйверов для снежинок. Казалось, я смогу подобрать правильный.


person Chao Mu    schedule 10.05.2018    source источник
comment
Мы очень ценим ваше намерение, но теперь вы можете задать вопрос с сообщением об ошибке и другими деталями. а в разделе ответов вы можете добавить свои шаги и фрагменты кода. : Рассмотрение   -  person Ram Ghadiyaram    schedule 31.07.2018
comment
его [snowflake-datawarehouse] не измененный тег схемы снежинки   -  person Ram Ghadiyaram    schedule 31.07.2018


Ответы (4)


Ответьте в соответствии с заданным пользователем (я только что извлек его из вопроса для удобства использования сайта:


Шаг 1. Создайте кластер с версией Spark - 2.3.0. и версия Scala - 2.11
Шаг 2. Прикрепите snowflake-jdbc-3.5.4.jar к кластеру. https://mvnrepository.com/artifact/net.snowflake/snowflake-jdbc/3.5.4
Шаг 3. Подключил драйвер spark-snowflake_2.11-2.3.2 к кластеру. https://mvnrepository.com/artifact/net.snowflake/spark-snowflake_2.11/2.3.2

Вот пример кода.

val SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"

val sfOptions = Map(
    "sfURL" -> "<snowflake_url>",
    "sfAccount" -> "<your account name>",
    "sfUser" -> "<your account user>",
    "sfPassword" -> "<your account pwd>",
    "sfDatabase" -> "<your database name>",
    "sfSchema" -> "<your schema name>",
    "sfWarehouse" -> "<your warehouse name>",
    "sfRole" -> "<your account role>",
    "region_id"-> "<your region name, if you are out of us region>"
)

val df: DataFrame = sqlContext.read
    .format(SNOWFLAKE_SOURCE_NAME)
    .options(sfOptions)
    .option("dbtable", "<your table>")
    .load()
person Dennis Jaheruddin    schedule 24.12.2019

Если вы используете Databricks, существует коннектор Databricks Snowflake, созданный совместно разработчиками Databricks и Snowflake. Вам просто нужно предоставить несколько элементов для создания фрейма данных Spark (см. Ниже - скопировано из документа Databricks).

# snowflake connection options
options = dict(sfUrl="<URL for your Snowflake account>",
               sfUser=user,
               sfPassword=password,
               sfDatabase="<The database to use for the session after connecting>",
               sfSchema="<The schema to use for the session after connecting>",
               sfWarehouse="<The default virtual warehouse to use for the session after connecting>")

df = spark.read \
  .format("snowflake") \
  .options(**options) \
  .option("dbtable", "<The name of the table to be read>") \
  .load()

display(df)

Пока вы получаете доступ к своим собственным базам данных со всеми правами доступа, предоставленными правильно, это займет всего несколько минут, даже во время нашей первой попытки.

Удачи!

person Jie    schedule 31.01.2020

Вам нужно установить переменные CLASSPATH, чтобы они указывали на jar, как показано ниже. Вам также необходимо настроить SPARK_HOME и SCALA_HOME помимо PYTHONPATH.


экспорт CLASSPATH = / snowflake-jdbc-3.8.0.jar: /spark-snowflake_2.11-2.4.14-spark_2.4.jar


Вы также можете загрузить в свой код jar-файлы памяти, чтобы решить эту проблему.


spark = SparkSession \ .builder \ .config ("spark.jars", "file: ///app/snowflake-jdbc-3.9.1.jar,file: ///app/spark-snowflake_2.11-2.5.3 -spark_2.2.jar ") \ .config (" spark.repl.local.jars "," file: ///app/snowflake-jdbc-3.9.1.jar,file: /// app / spark-snowflake_2 .11-2.5.3-spark_2.2.jar ") \ .config (" spark.sql.catalogImplementation "," в памяти ") \ .getOrCreate ()


person Ankur Srivastava    schedule 11.01.2020

Пожалуйста, обновите драйвер Snowflake JDBC до последней версии (3.2.5); это должно решить эту проблему. Спасибо!

person Sandy    schedule 24.12.2019