如何将“火花连接”与数据块一起使用以从SQL数据库中提取数据,然后转换为R数据帧?

时间:2019-07-12 10:28:37

标签: r scala azure-sql-database sparklyr azure-databricks

我试图将数据从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数据帧有任何想法吗?

0 个答案:

没有答案