我正在使用Python和Pyspark,我想将CSV文件上传到azure blob存储。我已经有一个由代码生成的数据框:df。我想做的是下一个:
# Dataframe generated by code
df
# Create the BlockBlockService that is used to call the Blob service for the storage account
block_blob_service = BlockBlobService(account_name='name', account_key='key')
container_name ='results-csv'
d = {'one' : pandas.Series([1., 2., 3.], index=['a', 'b', 'c']), 'two' : pandas.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pandas.DataFrame(d)
writer = pandas.ExcelWriter(df, engine='xlsxwriter')
a = df.to_excel(writer, sheet_name='Sheet1', index=False, engine='xlsxwriter')
block_blob_service.create_blob_from_stream(container_name, 'test', a)
我收到错误:
ValueError: stream should not be None.
所以我想将数据框的内容作为blob上传到上面提供的存储位置。没有先在我的本地计算机上生成CSV文件,有没有办法做到这一点?
答案 0 :(得分:1)
我们打算做的是使用 dataset.to_csv
函数创建一个文件流,然后将该流发送到 azure blob。对此的替代方法是我们直接将字符串数据集存储到 azure。代码:
blob_client = service.get_blob_client(container=container_name, blob=local_file_name)
print(str(dataset.to_csv()))
blob_client.upload_blob(str(dataset.to_csv()))
这会将文件存储到 blob 中。到目前为止,任何其他解决方案都不起作用。问题仍然是现在数据是 blob 不是 csv 格式的那部分我们仍然需要弄清楚。
编辑:添加了以csv格式发送的代码