Я пишу это не для того, чтобы задать вопрос, а для того, чтобы поделиться знаниями.
Я использовал Spark для подключения к снежинке. Но я не мог получить доступ к снежинке. Казалось, что-то не так с внутренним драйвером JDBC в блоках данных.
Здесь была ошибка, которую я получил.
java.lang.NoClassDefFoundError:net/snowflake/client/jdbc/internal/snowflake/common/core/S3FileEncryptionMaterial
Я перепробовал много версий драйверов снежинки jdbc и драйверов снежинки. Казалось, что я могу подобрать правильный.
И я поднял билет на поддержку блоков данных и получил от них решение. Теперь это работает хорошо.
Шаг 1: Создать кластер с версией Spark - 2.3.0. и версия Scala - 2.11
Шаг 2: Прикрепил снежинку-jdbc-3.5.4.jar к кластеру.
https://mvnrepository.com/artifact/net.snowflake/snowflake-jdbc/3.5.4
Шаг 3: Подключил драйвер spark-snowke_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()
Если у вас возникла такая же проблема, надеюсь, это поможет.