如何有效地仅读取托管在云 blob 存储(例如 S3 / Azure Blob 存储)中的 parquet 文件的某些列?
列式结构是 parquet 文件格式的主要优势之一,因此选择性地读取列可以减少 I/O 负载。将数据存储在 blob 存储中以在云上运行大规模工作负载也是很自然的。但是,一旦将 parquet 文件存储为 blob,大多数库(dask、fastparquet、pyarrow)就无法真正利用这一点,因为底层fseek
实际上不可能直接在 blob 上 - 这意味着无论选择哪一列在读取之前必须将整个文件下载到本地文件系统。
因此,如果我的用例是单独的应用程序需要不同的列,并且只为几列下载整个文件的性能成本是不可接受的,那么最佳实践是什么?我是否应该为每列存储不同的镶木地板文件以及一个公共索引,然后使用 pandas/dask 等在应用程序级别合并?apache parquet 格式是否具有按列拆分数据集的一些内置支持 - 类似于 hive 格式按分区然后按分区拆分的方式?
感谢任何使用 dask 或 fastparquet 的帮助/具体示例。