我有许多大型 csv(制表符分隔)数据存储为 azure blob,我想从这些数据创建一个 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-ClientLibrary-Python,我可以获得所需的最终结果(blob csv 数据的 pandas 数据框)。以 pandas 数据帧的形式访问数据集,但我更愿意直接从 blob 存储位置读取。
最佳答案
接受的答案在最新的 Azure 存储 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)
关于python - 在 azure ml 中运行笔记本时,如何最好地将 azure blob csv 格式转换为 pandas dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091830/