【问题标题】:Load data to Azure Blob from python data frame从 python 数据框将数据加载到 Azure Blob
【发布时间】:2021-06-26 17:25:51
【问题描述】:

我正在尝试将数据从 python 数据帧上传到 Azure Blob。

我一直在使用它从 Azure Blob 下载数据:

from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
import pandas as pd
from pandas import DataFrame as df
from io import StringIO
blob_service_client = 
BlobServiceClient.from_connection_string(os.environ["blob_conn_string"])
blob_client = blob_service_client.get_blob_client(blob_container,file_name)
Localfile = blob_client.download_blob().content_as_text()
        
df_data = pd.read_csv(StringIO(Localfile))

我想将 df_data 加载回 Azure blob 容器。 我尝试了以下代码:

blob_client.upload_blob(df_data)

谁能建议我做错了什么?

【问题讨论】:

  • 我认为您无法在 Azure 中保存内存中的 pandas 数据帧。尝试将其转换为 parquet/csv/txt 文件并重试
  • @flow_me_over 将其转换为 csv 后我能够完成它
  • @flow_me_over 我们无法在 Azure 中直接保存 pandas 数据帧。我们需要把它转换成内存中的csv/txt然后我们才能上传。

标签: python-3.x pandas azure-blob-storage


【解决方案1】:

正如 flow_me_over 在评论中所说,blob_client.upload_blob(df_data) 是不可能的。

upload_blob() 中允许的类型应该是Union[Iterable[AnyStr], IO[AnyStr]],但df_data 的类型是TextFileReader

以下代码可以正常工作:

blob_client2.upload_blob(Localfile)

或者

blob_client2.upload_blob(data=df_data.to_csv(index=False))

【讨论】:

  • 正如上面对@flow_me_over 的评论中提到的 - 我能够完成将其转换为 csv
【解决方案2】:

这是我为解决此问题所做的:

def blob_conn(df,blob_name):
    blob_service_client = BlobServiceClient.from_connection_string(os.environ["blob_conn_str"])
    blob_client = blob_service_client.get_blob_client(container=os.environ["container"],blob=blob_name)
    blob_client.upload_blob(df, overwrite = True)

我使用数据框和 blob_name 作为位置将“df”作为 csv 文件传递​​。

【讨论】:

    猜你喜欢
    • 2019-11-11
    • 2017-12-16
    • 2020-03-15
    • 2022-01-12
    • 2021-12-21
    • 2021-10-18
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多