我有许多大型csv(制表符分隔)数据以azure blobs形式存储,我想从这些数据中创建一个pandas dataframe。我可以在本地执行如下操作:
from azure.storage.blob import BlobService
import pandas as pd
import os.path
STORAGEACCOUNTNAME= 'account_name'
STORAGEACCOUNTKEY= "key"
LOCALFILENAME= 'path/to.csv'
CONTAINERNAME= 'container_name'
BLOBNAME= 'bloby_data/000000_0'
blob_service = BlobService(account_name=STORAGEACCOUNTNAME, account_key=STORAGEACCOUNTKEY)
# Only get a local copy if haven't already got it
if not os.path.isfile(LOCALFILENAME):
blob_service.get_blob_to_path(CONTAINERNAME,BLOBNAME,LOCALFILENAME)
df_customer = pd.read_csv(LOCALFILENAME, sep='\t')
然而,在Azure ML笔记本上运行notebook时,我不能“保存本地副本”然后从csv读取,所以我想直接进行转换(类似于pd.read_azure_blob(blob_csv)或pd.read_csv(blob_csv)的东西将是理想的)。
如果我首先创建一个azure ML工作区,然后将数据集读入其中,最后使用https://github.com/Azure/Azure-MachineLearning-ClientLibrary-Python将数据集作为pandas dataframe访问,我可以获得所需的最终结果(blob csv数据的pandas dataframe),但我更喜欢直接从blob存储位置读取。
5条答案
按热度按时间ybzsozfc1#
接受的答案在最新的Azure Storage SDK中将不起作用。MS已完全重写了SDK。如果您使用旧版本并更新它,这有点烦人。下面的代码应该在新版本中起作用。
wz1wpwve2#
我想你想用
get_blob_to_bytes
,or get_blob_to_text
;这些应该输出一个字符串,您可以使用该字符串创建一个dataframe作为slwdgvem3#
谢谢你的回答,我认为需要一些修正。你需要从blob对象中获取内容,在get_blob_to_text中不需要本地文件名。
mwg9r5ms4#
简单回答:
Working as on 12th June 2022
下面是将CSV文件从Azure Blob读取到Jupyter notebook dataframe(python)的步骤。
**步骤1:**首先通过右键单击blob/storage CSV文件(blob文件),在Azure存储上为目标CSV(blob)文件生成SAS令牌和URL。x1c 0d1x
**STEP 2:**复制SAS token和URL生成按钮下方的
Blob SAS URL
。**步骤3:**使用Jupyter notbook中的以下代码行导入所需的CSV。将
url
值替换为在上述步骤中复制的Blob SAS URL
。jobtbby35#
使用ADLFS(
pip install adlfs
),这是适用于Azure lakes(第1代和第2代)的兼容fsspec的API: