Azure Databricks中R Notebook调用Azure存储模块问题及操作咨询
在Databricks R Notebook中访问ADLS文件的实操步骤
1. 先解决azure模块找不到的坑
你之前用%sh装azure-storage-blob是装到shell环境里了,但R调用Python时用的是Databricks自带的Python环境,得用reticulate直接给这个环境装包:
library(reticulate) py_install("azure-storage-blob", envname = "r-reticulate")
装完记得重启Notebook内核,不然模块还是加载不到。
2. 获取指定路径的文件列表
假设你已经有存储账户的连接信息(账户名、密钥或SAS令牌),直接用下面的代码就能拿到目标路径下的所有文件:
library(reticulate) # 导入azure存储模块 BlobServiceClient <- import("azure.storage.blob$BlobServiceClient") # 用账户密钥初始化客户端,替换成你的信息 account_url <- "https://<你的存储账户名>.blob.core.windows.net/" account_key <- "<你的存储账户密钥>" conn_str <- paste0("DefaultEndpointsProtocol=https;AccountName=<你的存储账户名>;AccountKey=", account_key) client <- BlobServiceClient$from_connection_string(conn_str) # 拿到容器客户端 container_client <- client$get_container_client("<你的容器名>") # 筛选指定前缀(也就是路径)的文件,比如"raw_data/2024/" blobs <- container_client$list_blobs(name_starts_with = "raw_data/2024/") # 打印所有文件名 for (blob in blobs) { cat(blob$name, "\n") }
如果用SAS令牌,把连接字符串换成:
sas_token <- "<你的SAS令牌>" conn_str <- paste0("DefaultEndpointsProtocol=https;AccountName=<你的存储账户名>;SASToken=", sas_token)
3. 把文件加载到R里
拿到文件名后,直接用Databricks的ABFSS路径读取就行,比如读CSV:
for (blob in blobs) { # 构造完整的ABFSS路径 file_path <- paste0("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/", blob$name) # 读取成R数据框 df <- read.csv(file_path) # 这里加你的数据处理逻辑 print(head(df)) }
要是习惯用pandas,也可以通过reticulate调用Python读取再转成R数据框:
pd <- import("pandas") for (blob in blobs) { file_path <- paste0("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/", blob$name) py_df <- pd$read_csv(file_path) r_df <- as.data.frame(py_df) # 处理数据 }
4. 关于你用的py_list_attributes
这个工具可以直接对着容器客户端或单个blob对象用,快速查看可用的方法和属性:
# 查看容器客户端的所有可用方法 py_list_attributes(container_client) # 查看单个blob的属性和方法 sample_blob <- container_client$get_blob_client("raw_data/2024/sample.csv") py_list_attributes(sample_blob)
比如你能找到download_blob方法,可以直接把blob内容下载到Databricks的DBFS里。
内容的提问来源于stack exchange,提问作者tomsu
相关产品推荐
相关产品推荐

