我正在尝试使用sparklyr和jdbc将我的内部部署R环境连接到Azure数据块后端。我需要在数据块中执行操作,然后在本地收集结果。
1.没有可用的RStudio,只有一个终端
1.没有数据库连接。只有odbc或jdbc。
odbc + dplyr的配置是有效的,但是看起来太复杂了,所以我想使用jdbc和sparklyr.同样,如果我使用rJDBC,它也能工作,但是如果tidyverse能用于数据操作,那就太好了.因此我想使用sparklyr.
我的当前目录中有数据块的jar文件(DatabricksJDBC42.jar)。https://www.databricks.com/spark/jdbc-drivers-download.这是我目前得到的:
library(sparklyr)
config <- spark_config()
config$`sparklyr.shell.driver-class-path` <- "./DatabricksJDBC42.jar"
# something in the configuration should be wrong
sc <- spark_connect(master = "https://adb-xxxx.azuredatabricks.net/?o=xxxx",
method = "databricks",
config = config)
spark_read_jdbc(sc, "table",
options = list(
url = "jdbc:databricks://adb-{URL}.azuredatabricks.net:443/default;transportMode=http;ssl=1;httpPath=sql/protocolv1/o/{ORG_ID}/{CLUSTER_ID};AuthMech=3;UID=token;PWD={PERSONAL_ACCESS_TOKEN}",
dbtable = "table",
driver = "com.databricks.client.jdbc.Driver"))
这是错误:
发生错误:java. lang.对象17/org.apache.spark.sql的toDF方法无效。 Dataframe 读取器字段0已选择0
我的直觉是SC可能不是不工作了,也许是主控参数出了问题?
PS:这是通过RJDBC工作的解决方案
databricks_jdbc <- function(address, port, organization, cluster, token) {
location <- Sys.getenv("DATABRICKS_JAR")
driver <- RJDBC::JDBC(driverClass = "com.databricks.client.jdbc.Driver",
classPath = location)
con <- DBI::dbConnect(driver, sprintf("jdbc:databricks://%s:%s/default;transportMode=http;ssl=1;httpPath=sql/protocolv1/o/%s/%s;AuthMech=3;UID=token;PWD=%s", address, port, organization, cluster, token))
con
}
RICKS_JAR是一个环境变量,其路径为"./DatabaseksJDBC42.jar"
然后我可以使用DBI::dbSendQuery()等。
谢谢你,
我尝试了master的多个配置。到目前为止,我知道字符串"jdbc:databricks:..."的jdbc是工作的。JDBC连接的工作原理如PS部分的代码所示。
1条答案
按热度按时间pobjuy321#
使用azure数据库配置R studios-〉转到群集-〉应用程序-〉设置azure Rstudio。
有关信息,请参阅此第三方link,其中包含有关将Azure数据库与R连接的详细信息