Azure Blob(pyarrow)上的分区Parquet文件

时间:2019-10-30 13:09:45

标签: azure-storage-blobs parquet pyarrow

我一直在使用手动对熊猫进行文件分区(创建索引或多索引,然后为循环中的每个索引编写一个单独的拼花文件)到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)执行此操作吗?我的最终目标是仅读取对我的“查询”有意义的文件。

1 个答案:

答案 0 :(得分:0)

根据我的经验,并基于您当前的环境(基于Azure VM上的Linux),我认为有两种解决方案可以从Azure存储读取分区镶木文件。

  1. 按照Reading and Writing the Apache Parquet Format的文档pyarrow的{​​{3}}节,使用API​​ {{3}手动列出前缀为dataset_name的blob名称}},如下图所示,然后像示例代码一样逐个读取这些blob到数据帧,最后Reading a Parquet File from Azure Blob storage将这些数据帧单个。

    list_blob_names(container_name, prefix=None, num_results=None, include=None, delimiter=None, marker=None, timeout=None)

  2. 尝试使用concat将Azure Blob存储容器安装到Linux文件系统,然后只需遵循文档enter image description here即可从Azure Blob在本地读取分区数据集存储。