azure-blob-storage - 在 Azure Blob 上对 Parquet 文件进行分区 (pyarrow)

标签 azure-blob-storage parquet pyarrow

我一直在使用 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 文件。

  1. 按照pyarrow文档Reading and Writeing the Apache Parquet FormatReading a Parquet File from Azure Blob storage部分,手动列出前缀为的blob名称dataset_name 使用 Azure Storgae SDK for Python 的 API list_blob_names(container_name, prefix=None, num_results=None, include=None, delimiter=None, marker=None, timeout=None) 如下图所示,然后像示例代码一样将这些 blob 逐一读取到数据帧,最后将 concat 这些数据帧读取为单个数据帧。

    enter image description here

  2. 尝试使用 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/

相关文章:

python - 如何在 pyspark 中设置 spark.sql.parquet.output.committer.class

python - arrow_table = pa.Table.from_pandas(df) ... 将 Python 对象转换为 String/UTF8 时出错

python-3.x - 使用 read_parquet 从 Parquet 文件中获取带有分类列的 Pandas DataFrame?

azure - 通过 azure 函数导出 cosmosDB 并将文件保存在 blob 存储中

azure - 能否将 Azure Blob 容器设为 Azure 虚拟 Windows 计算机上的虚拟网络驱动器?

android - 在Android中合并多个Azure云 block blob

azure - 从 Azure 文件复制到 BLOB

avro - RollingSink 中的 Flink Avro Parquet Writer

python-3.x - Pandas read_parquet() 错误 : pyarrow. lib.ArrowInvalid:从时间戳 [us] 转换到时间戳 [ns] 将导致时间戳超出范围

python - 当 S3 为目标时 pandas.DataFrame.to_parquet 失败