Результат "Object = null" с подключением scala jdb c в ранее работающей записной книжке Databricks - PullRequest
0 голосов
/ 16 апреля 2020

В настоящее время я пытаюсь отладить ноутбук Python / scala Databricks с подключением jdb c к базе данных Azure SQL, которую установил коллега перед тем, как покинуть компанию, которая работала в течение нескольких месяцев. с тех пор как он ушел. Я знаю некоторые python, но обладаю очень ограниченными знаниями scala, хотя я установил соединения jdb c перед использованием SparkR :: read.jdb c.

jdb c Код подключения (разделенный на несколько ячеек) выглядит следующим образом (имена и учетные данные изменены в целях безопасности):

%scala
// Declare the values for your Azure SQL database
val jdbcUsername = "ThisUser"
val jdbcPassword = "ThisUserPassword123"
val jdbcHostname = "ThisServer.database.windows.net" 
val jdbcPort = 1433
val jdbcDatabase ="ThisDatabase"

import java.util.Properties
val jdbc_url= s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=300;"

val connectionProperties = new Properties()
connectionProperties.put("user", s"${jdbcUsername}")
connectionProperties.put("password", s"${jdbcPassword}")

Следующая ячейка пытается прочитать таблицу, например

%scala
val thistable = spark.read.jdbc(jdbc_url, "[dbo].[Table_Name]", connectionProperties)
thistable.show(10)

Но это застревает в «Spark Jobs» на неопределенное время.

Я попытался отладить:

%scala
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

возвращает:

res8: Класс [_] = класс com.microsoft .sqlserver.jdb c .SQLServerDriver

Что я не знаю, как интерпретировать. Означает ли это, что драйвер существует или нет?

И

%scala
val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
connectionProperties.setProperty("Driver", driverClass)

возвращает:

driverClass: String = com.microsoft.sqlserver.jdb c .SQLServerDriver res9: Object = null

Предполагается, что соединение не было успешным. Я проверил учетные данные, используемые для доступа к серверу, и они определенно правильные (и нормально работали в этом ноутбуке примерно до недели go).

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

%r

library(SparkR)

test_url <- "jdbc:sqlserver://ThisServer.database.windows.net:1433;database=ThisDatabase;user=ThisUser;password=ThisUserPassword123"
df_test <- read.jdbc( test_url, "(SELECT TOP 10 * FROM [dbo].[Table_Name]) as result" )

print(str(df_test))

Есть идеи о том, что могло пойти не так или как это исправить? (Я не могу удалить и воссоздать кластер из-за библиотек и пользовательских настроек, которые были на нем настроены, если нет какого-либо способа создания копии кластера, которая сохраняет все это.)

...