使用Azure Databricks PySpark访问Azure Files中RDS文件失败求助
解决RDS文件读取失败的问题
核心问题是你用错了读取函数:pd.read_excel() 仅支持读取Excel格式(.xlsx/.xls等),而RDS是R语言的序列化文件格式,两者不兼容,导致读取失败。以下是几种可行的解决方法:
方法一:使用pyreadr库读取
pyreadr是专门用于读取R语言数据格式的Python库,步骤如下:
- 先在Databricks中安装依赖库:
%pip install pyreadr requests
- 读取带SAS令牌的Azure存储中的RDS文件:
import pyreadr import requests url_sas_token = 'https://<my account name>.file.core.windows.net/test/test.rds?st=2020-01-27T10%3A16%3A12Z&se=2020-01-28T10%3A16%3A12Z&sp=rl&sv=2018-03-28&sr=f&sig=XXXXXXXXXXXXXXXXX' # 从URL下载文件内容到内存 response = requests.get(url_sas_token) response.raise_for_status() # 捕获请求错误 # 读取RDS内容并转换为pandas DataFrame result = pyreadr.read_r_raw(response.content) pdf = result[None] # RDS通常存储单个对象,直接取第一个 # 转换为PySpark DataFrame df = spark.createDataFrame(pdf)
方法二:通过rpy2调用R的readRDS函数
如果环境允许安装R相关依赖,可通过rpy2调用R原生函数读取:
- 安装依赖:
%pip install rpy2 requests
- 读取代码:
import rpy2.robjects as robjects from rpy2.robjects import pandas2ri import requests # 启用pandas与R对象的转换 pandas2ri.activate() url_sas_token = 'https://<my account name>.file.core.windows.net/test/test.rds?st=2020-01-27T10%3A16%3A12Z&se=2020-01-28T10%3A16%3A12Z&sp=rl&sv=2018-03-28&sr=f&sig=XXXXXXXXXXXXXXXXX' # 下载文件到临时路径 temp_file = "/tmp/test.rds" response = requests.get(url_sas_token) with open(temp_file, "wb") as f: f.write(response.content) # 调用R的readRDS读取文件 read_rds = robjects.r['readRDS'] r_data = read_rds(temp_file) # 转换为pandas DataFrame再转PySpark pdf = pandas2ri.rpy2py(r_data) df = spark.createDataFrame(pdf)
方法三:挂载Azure存储后读取(大文件推荐)
如果文件较大,建议先挂载Azure存储账户到Databricks,再读取本地挂载路径的文件:
- 挂载存储(替换占位符):
dbutils.fs.mount( source = "wasbs://test@<my account name>.blob.core.windows.net", mount_point = "/mnt/test", extra_configs = {"fs.azure.sas.test.<my account name>.blob.core.windows.net": "你的SAS令牌部分(去掉URL中的前缀)"} )
- 读取挂载路径的RDS文件:
import pyreadr # 读取挂载路径下的文件 result = pyreadr.read_r("/dbfs/mnt/test/test.rds") pdf = result[None] df = spark.createDataFrame(pdf)
内容的提问来源于stack exchange,提问作者hari_agg
相关产品推荐
相关产品推荐

