我试图将数据从Azure SQL数据库提取到Azure Databricks上的R笔记本中,以在其上运行R脚本。由于我在使用jdbc和DBI时遇到了困难(在这里:"No suitable driver" error when using sparklyr::spark_read_jdbc to query Azure SQL database from Azure Databricks和在这里:How to get SQL database connection compatible with DBI::dbGetQuery function when converting between R script and databricks R notebook?),我决定使用内置的Spark连接器(出于安全原因更改了凭证):>
%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 dave_connection = Config(Map(
"url" -> "servername.database.windows.net",
"databaseName" -> "databasename",
"dbTable" -> "myschema.mytable",
"user" -> "username",
"password" -> "userpassword"
))
val collection = sqlContext.read.sqlDB(dave_connection)
collection.show()
从某种意义上讲,它可以显示数据,但是作为一个不了解scala或spark的人,我现在不知道如何将其放入R或R兼容的数据框中。
我试图查看“集合”是什么样的对象,但是:
%scala
getClass(collection)
仅返回:
notebook:1: error: too many arguments for method getClass: ()Class[_ <: $iw]
getClass(collection)
尝试使用sparklyr访问它意味着它实际上并不存在,例如
library(sparklyr)
sc <- spark_connect(method="databricks")
sdf_schema(collection)
返回:
Error in spark_dataframe(x) : object 'collection' not found
对于任何了解scala的人来说,我觉得这很明显,但我不是(我来自分析师而不是计算机科学背景),我只是想将这些数据放入R数据框中,以便对它进行分析。 (我知道Databricks都是关于并行化和缩放的,但是我没有对该数据集执行任何并行化功能,我使用Databricks的唯一原因是因为我的工作PC没有足够的内存来在本地运行我的分析!)
那么,有人对我如何将这个火花对象“集合”转换为R数据帧有任何想法吗?