如何最好地从Azure Blob CSV格式转换为Pandas DataFrame,同时在Azure ML中运行Notebook

yk9xbfzb  于 2023-04-28  发布在  其他
关注(0)|答案(5)|浏览(121)

我有许多大型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存储位置读取。

ybzsozfc

ybzsozfc1#

接受的答案在最新的Azure Storage SDK中将不起作用。MS已完全重写了SDK。如果您使用旧版本并更新它,这有点烦人。下面的代码应该在新版本中起作用。

from azure.storage.blob import ContainerClient
from io import StringIO
import pandas as pd

conn_str = ""
container_name = ""
blob_name = ""

# Create a ContainerClient instance via connection string auth.
container_client = ContainerClient.from_connection_string(conn_str, container_name)
# Download blob as StorageStreamDownloader object (stored in memory)
downloaded_blob = container_client.download_blob(blob_name, encoding='utf8')

df = pd.read_csv(StringIO(downloaded_blob.readall()), low_memory=False)
wz1wpwve

wz1wpwve2#

我想你想用get_blob_to_bytesor get_blob_to_text;这些应该输出一个字符串,您可以使用该字符串创建一个dataframe作为

from io import StringIO
blobstring = blob_service.get_blob_to_text(CONTAINERNAME,BLOBNAME)
df = pd.read_csv(StringIO(blobstring))
slwdgvem

slwdgvem3#

谢谢你的回答,我认为需要一些修正。你需要从blob对象中获取内容,在get_blob_to_text中不需要本地文件名。

from io import StringIO
blobstring = blob_service.get_blob_to_text(CONTAINERNAME,BLOBNAME).content
df = pd.read_csv(StringIO(blobstring))
mwg9r5ms

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

import pandas as pd 
url ='Your Blob SAS URL'
df = pd.read_csv(url)
df.head()
jobtbby3

jobtbby35#

使用ADLFS(pip install adlfs),这是适用于Azure lakes(第1代和第2代)的兼容fsspec的API:

storage_options = {
    'tenant_id': tenant_id,
    'account_name': account_name,
    'client_id': client_id,
    'client_secret': client_secret
}

url = 'az://some/path.csv'
pd.read_csv(url, storage_options=storage_options)

相关问题