我一直在使用手动对熊猫进行文件分区(创建索引或多索引,然后为循环中的每个索引编写一个单独的拼花文件)到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)执行此操作吗?我的最终目标是仅读取对我的“查询”有意义的文件。
答案 0 :(得分:0)
根据我的经验,并基于您当前的环境(基于Azure VM上的Linux),我认为有两种解决方案可以从Azure存储读取分区镶木文件。
按照Reading and Writing the Apache Parquet Format
的文档pyarrow
的{{3}}节,使用API {{3}手动列出前缀为dataset_name
的blob名称}},如下图所示,然后像示例代码一样逐个读取这些blob到数据帧,最后Reading a Parquet File from Azure Blob storage
将这些数据帧单个。
尝试使用concat将Azure Blob存储容器安装到Linux文件系统,然后只需遵循文档即可从Azure Blob在本地读取分区数据集存储。