dask - 如何使用 dask/fastparquet 从多个目录读取多个 Parquet 文件(具有相同的架构)

标签 dask fastparquet

我需要使用 dask 将具有相同架构的多个 Parquet 文件加载到单个数据框中。这在它们都在同一目录中时有效,但当它们在不同的目录中时无效。

例如:

import fastparquet
pfile = fastparquet.ParquetFile(['data/data1.parq', 'data/data2.parq'])

工作正常,但如果我复制 data2.parq到不同的目录,以下不起作用:
pfile = fastparquet.ParquetFile(['data/data1.parq', 'data2/data2.parq'])

我得到的回溯如下:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-11-b3d381f14edc> in <module>()
----> 1 pfile = fastparquet.ParquetFile(['data/data1.parq', 'data2/data2.parq'])

~/anaconda/envs/hv/lib/python3.6/site-packages/fastparquet/api.py in __init__(self, fn, verify, open_with, sep)
     82         if isinstance(fn, (tuple, list)):
     83             basepath, fmd = metadata_from_many(fn, verify_schema=verify,
---> 84                                                open_with=open_with)
     85             self.fn = sep.join([basepath, '_metadata'])  # effective file
     86             self.fmd = fmd

~/anaconda/envs/hv/lib/python3.6/site-packages/fastparquet/util.py in metadata_from_many(file_list, verify_schema, open_with)
    164     else:
    165         raise ValueError("Merge requires all PaquetFile instances or none")
--> 166     basepath, file_list = analyse_paths(file_list, sep)
    167 
    168     if verify_schema:

~/anaconda/envs/hv/lib/python3.6/site-packages/fastparquet/util.py in analyse_paths(file_list, sep)
    221     if len({tuple([p.split('=')[0] for p in parts[l:-1]])
    222             for parts in path_parts_list}) > 1:
--> 223         raise ValueError('Partitioning directories do not agree')
    224     for path_parts in path_parts_list:
    225         for path_part in path_parts[l:-1]:

ValueError: Partitioning directories do not agree

我在使用 dask.dataframe.read_parquet 时遇到同样的错误,我假设使用相同的 ParquetFile目的。

如何从不同目录加载多个文件?将我需要加载的所有文件都放在同一个目录中不是一种选择。

最佳答案

如果使用绝对路径或显式相对路径,这在 master 上的 fastparquet 中确实有效:

pfile = fastparquet.ParquetFile(['./data/data1.parq', './data2/data2.parq'])

需要领先./应该被认为是一个错误 - 请参阅问题。

关于dask - 如何使用 dask/fastparquet 从多个目录读取多个 Parquet 文件(具有相同的架构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46371182/

相关文章:

Dask 表演 : workflow doubts

loops - 如何在训练/测试集中使用拆分大数据集,但也使用 pandas batchsize 迭代进行更新

python - 无法读取 Parquet 文件

python - 如何将包含一列数组的 Dask 数据帧写入 Parquet 文件

python - 如何在没有足够 RAM 的情况下使用 Pandas 打开巨大的 Parquet 文件

python - 如何将系列或序列分配给 dask 数据框列?

python - 如何将自定义函数并行应用于数组的成对元素?

python - 创建和合并多个数据集不适合内存,使用 Dask?

azure - 将数据从数据库移动到 Azure Blob 存储

apache-spark - 具有 Struct 列类型的读/写 Parquet