python - 将存储为 Azure Blob 的 CSV 直接加载到 Pandas 数据帧中,而无需先保存到磁盘
问题描述
使用 pandas 探索 Azure blob 存储中的数据一文(此处)展示了如何将数据从 Azure Blob 存储加载到 Pandas 数据框中。
他们首先下载 blob 并将其作为 CSV 文件存储在本地,然后将该 CSV 文件加载到数据框中。
import pandas as pd
from azure.storage.blob import BlockBlobService
blob_service = BlockBlobService(account_name=STORAGEACCOUNTNAME, account_key=STORAGEACCOUNTKEY)
blob_service.get_blob_to_path(CONTAINERNAME, BLOBNAME, LOCALFILENAME)
dataframe_blobdata = pd.read_csv(LOCALFILE)
有没有办法将 blob 直接拉入数据帧而不先将其保存到本地磁盘?
解决方案
你可以尝试这样的事情(使用StringIO
):
import pandas as pd
from azure.storage.blob import BlockBlobService
from io import StringIO
blob_service = BlockBlobService(account_name=STORAGEACCOUNTNAME, account_key=STORAGEACCOUNTKEY)
blob_string = blob_service.get_blob_to_text(CONTAINERNAME, BLOBNAME)
dataframe_blobdata = pd.read_csv(StringIO(blobstring))
请注意,该文件将存储在内存中,这意味着如果它是一个大文件,它可能会导致MemoryError
(也许您可以尝试del
在blob_string
数据帧中获取数据后释放内存,idk)。
我对 Azure DataLake Storage Gen2(它使用 Azure Blob 存储)或多或少做了同样的事情。
希望能帮助到你。
推荐阅读
- flutter - 我们如何在 Flutter/Dart 中将自定义 DateTime 格式化为 DateTime?
- linux - 限制Golang中Linux用户的进程及其所有子进程使用的总内存
- ffmpeg - 使用 FFmpeg 将 MTS 转换为 MP4 导致没有/丢失音频
- mysql - 将核心 php 查询转换为 laravel 7
- javascript - 在使用 Microsoft 认知语音服务时,拒绝从 Chrome 扩展应用程序中的 blob 创建工作人员
- javascript - JavaScript:从给定二维数组的内部数组中删除所有重复元素
- c++ - std::async 非常慢
- jquery - 延迟对象 catch() 方法链接
- wordpress - 打开网站后如何从主页重定向到登录页面
- pytorch - 关于 CNN 的基本问题:“参数数量”和“学习速度”之间的关系