12

我有许多存储为天蓝色 blob 的大型 csv(制表符分隔)数据,我想从这些数据中创建一个 pandas 数据框。我可以在本地执行以下操作:

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 笔记本上运行笔记本时,我无法“保存本地副本”然后从 csv 读取,因此我想直接进行转换(类似于 pd.read_azure_blob(blob_csv) 或只是 pd .read_csv(blob_csv) 将是理想的)。

如果我首先创建一个 azure ML 工作区,然后将数据集读入其中,最后使用https://github.com/Azure/Azure-MachineLearning,我可以获得所需的最终结果(用于 blob csv 数据的 pandas 数据框)-ClientLibrary-Python将数据集作为 pandas 数据框访问,但我更愿意直接从 blob 存储位置读取。

4

5 回答 5

17

我想你想使用get_blob_to_bytes, or get_blob_to_text; 这些应该输出一个字符串,您可以使用它来创建一个数据框

from io import StringIO
blobstring = blob_service.get_blob_to_text(CONTAINERNAME,BLOBNAME)
df = pd.read_csv(StringIO(blobstring))
于 2015-10-12T23:38:59.743 回答
16

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

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

conn_str = ""
container = ""
blob_name = ""

container_client = ContainerClient.from_connection_string(
    conn_str=conn_str, 
    container_name=container
    )
# Download blob as StorageStreamDownloader object (stored in memory)
downloaded_blob = container_client.download_blob(blob_name)

df = pd.read_csv(StringIO(downloaded_blob.content_as_text()))

于 2020-04-17T09:06:54.273 回答
11

感谢您的回答,我认为需要进行一些更正。您需要从 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))
于 2018-06-12T04:56:16.823 回答
2

简单的答案:

Working as on 20th Sep 2020

以下是将 CSV 文件从 Azure Blob 读取到 Jupyter 笔记本数据框 (python) 的步骤。

第1 步: 首先通过右键单击 blob/存储 CSV 文件(blob 文件)为 Azure 存储上的目标 CSV(blob)文件生成 SAS 令牌和 URL。 在此处输入图像描述

第 2 步:复制Blob SAS URL出现在用于生成 SAS 令牌和 URL 的按钮下方的 。

第 3 步:使用 Jupyter 笔记本中的以下代码行导入所需的 CSV。将url值替换为您Blob SAS URL在上述步骤中复制的值。

import pandas as pd 
url ='Your Blob SAS URL'
df = pd.read_csv(url)
df.head()
于 2020-09-24T17:43:18.583 回答
2

使用 ADLFS ( pip install adlfs),它是适用于 Azure 湖(gen1 和 gen2)的 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)
于 2021-06-04T15:14:03.787 回答