有人在 MAC OS Ventura (13.4) 和 M1 芯片上成功使用/配置带有 databricks 社区版的 Rstudio 桌面的 ODBC 吗?
databricks 社区版的链接在这里 --> link
我在这里下载了 MAC OS 驱动程序 --> link
我尝试在这里使用 ODBC 管理器 --> link
Rstudio/Posit 似乎建议我们需要使用 unixODBC,我在这里得到了 --> link。我尝试使用 home-brew 安装 unixODBC,但遇到路径问题并决定手动下载。
我尝试根据这些参数配置驱动程序/dsn -->link。我还添加了 UID 和 PWD key:value,因为社区版不允许创建个人令牌。
Rstudio多次提供
Error: nanodbc/nanodbc.cpp:1118: 00000: [unixODBC][Driver Manager]Data source name not found and no default driver specified
当我进入新连接时,我只看到 Spark 和 Livy,没有 Simba Spark Odbc 驱动程序。当我使用 home-brew 中的 unixODBC 以及在
ODBCSYSINI=/opt/homebrew/etc
中指定的 ~/.Renviron
(如此处指定的链接)时,我至少可以在 Rstudio 连接选项卡的新连接窗口中看到 Simba Spark Odbc 驱动程序。
我知道我在这里没有给出太多细节(即 reprex),但试图了解如何使用 /test Rstudio 桌面和 databricks 来处理大于 RAM 的数据集。在本地测试一下是否可以复制到我的办公环境中。使用这些 ODBC 驱动程序等对我来说是新的。感谢您提供的任何资源/示例/帮助。
Databricks 刚刚在您共享的链接中发布了适用于 MacOS 的新的 ARM64 兼容 ODBC 驱动程序。一个主要问题是缺乏 ARM 编译,导致 RStudio 和 R 包搜索包时出现问题。我经历的粗略步骤:
brew install unixodbc
.ini
检查以确保
odbcinst -j
/Library/simba/spark
echo "\n" >> /opt/homebrew/etc/odbcinst.ini
echo "[databricks_spark_sql]" >> /opt/homebrew/etc/odbcinst.ini
echo "Driver=/Library/simba/spark/lib/libsparkodbc_sb64-universal.dylib" >> /opt/homebrew/etc/odbcinst.ini
echo "ODBCInstLib=/opt/homebrew/opt/unixodbc/lib/libodbcinst.2.dylib" >> /Library/simba/spark/lib/simba.sparkodbc.ini
这些命令将
databricks_spark_sql
驱动程序位置添加到 unixODBC
驱动程序管理器使用的“连接器配置文件”中。它还使 unixODBC
实用程序可供 databricks_spark_sql
驱动程序使用。完成后,关闭终端并打开 RStudio。
.Rprofile
添加一个条目,设置一个环境变量,告诉 R 在哪里查找 odbc 的配置文件。这是存储 odbcinst.ini
文件的位置。在 RStudio 的项目中,您可以通过使用以下命令打开 .Rprofile 来执行此操作:usethis::edit_r_profile(scope = 'project')
然后,在 .Rprofile 中,粘贴以下内容:
Sys.setenv(ODBCSYSINI='/opt/homebrew/etc')
重新启动 R 会话并检查新的 ODBC 驱动程序是否已被识别/正确列出:
odbc::odbcListDrivers()
使用 Databricks 的文档通过 ODBC 连接到 Databricks 的过程。从
dbplyr
来看,它可能看起来像这样:
db_odbc <- DBI::dbConnect(
drv = odbc::odbc(),
driver = 'databricks_spark_sql',
server = 'adb-[...].azuredatabricks.net',
host = 'adb-[...].azuredatabricks.net',
port = 443,
httppath = '/sql/1.0/warehouses/01d71fe07e891bb6',
catalog = '...',
schema = '...',
thrifttransport = 2,
ssl = 1,
authmech = 3,
uid = 'token',
pwd = keyring::key_get(service = 'simba_connector_token')
)