在 azure ml 中运行笔记本时如何最好地将 azure blob csv 格式转换为 pandas 数据框

新手上路,请多包涵

我有许多存储为天蓝色 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 将数据集作为熊猫数据框访问,但我更愿意直接从 blob 存储位置读取。

原文由 random.me 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 395
2 个回答

我想你想使用 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))

原文由 maxymoo 发布,翻译遵循 CC BY-SA 4.0 许可协议

已接受的答案不适用于最新的 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()))

原文由 hui chen 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题