使用jdbc和sparklyr从R连接到Azure数据块

pdkcd3nj  于 2023-01-14  发布在  Spark
关注(0)|答案(1)|浏览(194)

我正在尝试使用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部分的代码所示。

pobjuy32

pobjuy321#

使用azure数据库配置R studios-〉转到群集-〉应用程序-〉设置azure Rstudio

有关信息,请参阅此第三方link,其中包含有关将Azure数据库与R连接的详细信息

    • python中的替代方法**:
    • 代码:**
Server_name = "vamsisql.database.windows.net"
Database = "<database_name"
Port = "1433"
user_name = "<user_name>"
Password = "<password"
jdbc_Url = "jdbc:sqlserver://{0}:{1};database={2}".format(Server_name, Port,Database)
conProp = {
  "user" : user_name,
  "password" : Password,
  "driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

df = spark.read.jdbc(url=jdbc_Url, table="<table_name>", properties=conProp)
display(df)
    • 输出:**

相关问题