Я пытаюсь подключиться к базе данных SQL Azure из записной книжки Databricks с помощью функции sparklyr :: spark_read_jdbc. Я аналитик без компьютерных знаний (помимо R и SQL) или предыдущего опыта использования Spark или jdbc (ранее я использовал локальные экземпляры R для подключения к той же базе данных SQL через odbc), поэтому я прошу прощения, если я неправильно понял что-то жизненно важное.
Мой код:
sc <- spark_connect(method = "databricks")
library(sparklyr)
library(dplyr)
config <- spark_config()
db_tbl <- sc %>%
spark_read_jdbc(sc,
name = "myresults",
options = list(url = "mysqlserver.database.windows.net",
user = "adminuser",
password = "adminpassword",
dbtable = "(SELECT
[Post_Sector]
,[People]
,[Field_1]
,[Field_2]
,[Field_3]
FROM [myschema].[mytable]) as my_query"))
Что приводит к ошибке:
Ошибка: java.sql.SQLException: нет подходящего драйвера на
java.sql.DriverManager.getDriver (DriverManager.java:315) в
org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions $$ anonfun $ 6.apply (JDBCOptions.scala: 105)
в
org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions $$ anonfun $ 6.apply (JDBCOptions.scala: 105)
в scala.Option.getOrElse (Option.scala: 121)
(Я сократил список мест, в которых не удается найти подходящий драйвер, так как он очень длинный.)
Я установил в кластер "azure_sqldb_spark_1_0_2_jar_with_dependencies.jar" и "sqljdbc42.jar", а также библиотеку Maven "com.microsoft.azure:azure-sqldb-spark:1.0.2".
Я также попытался указать местоположение драйвера как таковое:
config$`sparklyr.shell.driver-class-path` <- "dbfs:/FileStore/jars/3db936ce_5bda_4344_b102_32c0dcae2f87-azure_sqldb_spark_1_0_2_jar_with_dependencies-7114d.jar"
но это не мешает сообщению об ошибке.
Я могу подключиться к базе данных, используя:
%scala
//Connect to database:
import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._
// Aquire a DataFrame collection (val collection)
val my_connection = Config(Map(
"url" -> "mysqlserver.database.windows.net",
"databaseName" -> "mydatabase",
"dbTable" -> "mytable",
"user" -> "adminuser",
"password" -> "adminpassword"
))
val collection = sqlContext.read.sqlDB(my_connection)
collection.show()
Таким образом, учетные данные подключения не являются проблемой. Однако я не знаю, как использовать sparklyr для доступа к этому соединению и выполнять SQL-запросы к нему для генерации R-данных (или Spark-данных, которые я могу преобразовать в R-данные), поэтому я все еще надеюсь, что смогу получить соединение через sparklyr на работу.
Заранее спасибо за любой совет!