我一直在使用 pandas 手动将文件分区(创建索引或多索引,然后在循环中为每个索引写入单独的 parquet 文件)到 Azure Blob。
但是,在阅读 pyarrow 的文档时,我发现可以创建一个“数据集”,其中包含分区数据的文件夹结构。 https://arrow.apache.org/docs/python/parquet.html
每月/每日文件夹的示例正是我想要实现的目标。
dataset_name/
year=2007/
month=01/
0.parq
1.parq
...
month=02/
0.parq
1.parq
...
month=03/
...
year=2008/
month=01/
...
fs = pa.hdfs.connect(host, port, user=user, kerb_ticket=ticket_cache_path)
pq.write_to_dataset(table, root_path='dataset_name',
partition_cols=['one', 'two'], filesystem=fs)
我可以使用 Azure Blob(或使用 S3 并包装我的 Azure Blob 存储的 Minio)来执行此操作吗?我的最终目标是只读取对我的“查询”有意义的文件。
最佳答案
根据我的经验,并根据您当前的 Linux on Azure VM 环境,我认为有两种解决方案可以从 Azure 存储读取分区 parquet 文件。
按照
pyarrow
文档Reading and Writeing the Apache Parquet Format
的Reading a Parquet File from Azure Blob storage
部分,手动列出前缀为的blob名称dataset_name
使用 Azure Storgae SDK for Python 的 APIlist_blob_names(container_name, prefix=None, num_results=None, include=None, delimiter=None, marker=None, timeout=None)
如下图所示,然后像示例代码一样将这些 blob 逐一读取到数据帧,最后将 concat 这些数据帧读取为单个数据帧。尝试使用
<Azure/azure-storage-fuse
将 Azure Blob Storage 的容器挂载到您的 Linux 文件系统,然后您只需按照文档部分Reading from Partitioned Datasets
即可从 Azure Blob Storage 本地读取分区数据集。
关于azure-blob-storage - 在 Azure Blob 上对 Parquet 文件进行分区 (pyarrow),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58626126/