You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中读取Azure Blob存储的.csv.gz文件时无法正常解压的问题

Azure Blob 直接读取.csv.gz文件解决方案

问题原因

readr读取本地.gz文件时会自动根据后缀识别压缩格式并完成解压,但读取Azure Blob的远程内容时,无论是直接传入SAS URL还是调用AzureStor的默认读取方法,都无法自动触发gzip解压流程,拿到的是未解压的二进制内容,因此无法正常解析为csv结构。

适配方案

你可以根据自己的使用场景选择以下任意一种方案修改代码:

方案1:基于带SAS令牌的URL直接读取

核心逻辑是先请求获取Blob的原始二进制内容,手动完成gzip解压后再交给read_delim解析:

library(httr)
library(readr)

# 拼接带SAS的Blob地址,和你原有逻辑一致
blob_urls_with_sas <- paste("https://name.blob.core.windows.net","/container/filename.csv.gz", sas_token, sep="")

# 发送请求获取二进制内容,校验请求是否成功
resp <- GET(blob_urls_with_sas)
stop_for_status(resp)

# 建立二进制连接并挂载gzip解压流
raw_conn <- rawConnection(content(resp, as = "raw"))
gz_conn <- gzcon(raw_conn)

# 读取解压后的csv内容
dfAzure <- read_delim(
  gz_conn, 
  delim=";",
  col_names=c('epoch','SegmentID','TT','Speed','LoS','Coverage'),
  col_types=cols(
    epoch = col_integer(),
    SegmentID = col_integer(),
    TT = col_integer(),
    Speed = col_integer(),
    LoS = col_integer(),
    Coverage = col_integer()
  )
)

# 用完手动关闭连接,避免内存泄漏
close(gz_conn)
close(raw_conn)

方案2:基于AzureStor包读取

不需要把文件落地到本地磁盘,直接将Blob内容下载到内存连接后解压即可:

library(AzureStor)
library(readr)

# 创建可读写的临时内存连接
tmp_conn <- rawConnection(raw(0), "r+")
# 将Blob内容下载到内存连接中
storage_download(cont, "filename.csv.gz", tmp_conn)
# 重置连接指针到内容开头
seek(tmp_conn, 0)
# 挂载gzip解压流
gz_conn <- gzcon(tmp_conn)

# 读取解压后的csv内容
test <- read_delim(
  gz_conn,
  delim=";",
  col_names=c('epoch','SegmentID','TT','Speed','LoS','Coverage'),
  col_types=cols(
    epoch = col_integer(),
    SegmentID = col_integer(),
    TT = col_integer(),
    Speed = col_integer(),
    LoS = col_integer(),
    Coverage = col_integer()
  )
)

# 手动关闭连接释放内存
close(gz_conn)
close(tmp_conn)

提示:如果运行时报缺少依赖包的错误,可先运行install.packages(c("httr", "readr", "AzureStor"))安装所需依赖

内容的提问来源于stack exchange,提问作者Marthe Uenk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:48:04