[英]Realtime data analytics using Elastic Stack on data residing in Azure Data Lake Storage Gen2
[英]Cannot create Append Blobs in Azure Data Lake Gen2 using python azure-storage-file-datalake SDK
我的用例要求我不断地将传入消息写入存储在 Azure Data Lake Gen2 存储帐户中的文件中。 我可以通过触发 function 创建文件,它使用 python azure-storage-file-datalake SDK 与存储帐户进行交互。
问题是,默认情况下,使用 DataLakeFileClient class 的 create_file() 方法创建的文件是块 Blob(并且没有任何参数可以更改创建的 blob 的类型),这意味着我不能 append 之后的数据新消息到达。
我已经尝试使用 python azure-storage-blob SDK,但是,它无法使用路径在我的数据湖的容器中定位文件。
这将是我如何创建文件的示例,尽管这些文件以 Block Blob 的形式出现:
if int(day) in days:
day_directory_client.create_directory()
file_client = day_directory_client.create_file(f'{json_name}')
file_client.append_data(data=f'{str(message_body)}\n', offset=0,
length=len(str(message_body)))
file_client.flush_data(len(str(message_body)))
write_to_cache(year, month, day, json_path)
感谢我能得到的任何帮助,谢谢!
如果要在 Azure Data Lake Gen2 帐户中创建 append blob,则需要使用azure-storage-blob
package 而不是azure-storage-file-datalake
。
azure-storage-file-datalake
package 是Azure Data Lake Store REST API
的包装器,它不允许您指定 blob 类型。
通过使用 BlobClient 库在 Azure Datalake Storage Gen2 中创建和 append 一个 blob,我能够实现您的要求,使用以下代码:
from azure.storage.blob import BlobClient
#converted a pandas dataframe to csv (your data can be converted to your desired file format)
data=df.to_csv()
sas_url="https://<ACCOUNT_NAME>.blob.core.windows.net/<CONTAINER>/<DIRECTORIES>/<BLOBNAME>?<SAS TOKEN>"
blob_client = BlobClient.from_blob_url(sas_url)
blob_client.upload_blob(data, blob_type="AppendBlob")
在数据湖中创建 append blob 后,您可以在每次要添加值时使用 blob_client.append_block(data) append 文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.