我从位于同一文件夹中的多个 Parquet 文件创建了一个 Parquet 文件。每个文件对应一个分区。
Parquet 文件是在不同的进程中创建的(使用 Python concurrent.futures
)。这是我在一个进程中运行的代码示例:
# `df` is a standard Pandas DataFrame with
# 22 columns of different types and at most 100e3 rows.
# Set the index
df.set_index("cid", inplace=True)
# Write to single file
fastparquet.write(fpath, df, compression='snappy, file_scheme='simple)
df
最多包含100e3
行(和 22 列)并在整数索引(称为cid
)上编制索引。
然后我使用以下方法创建了两个元数据文件:
# `data_paths` contains the list of all the Parquet data files
# created in multiple processes.
fastparquet.writer.merge(data_paths, verify_schema=True)
确实_metadata
并且_common_metadata
在包含所有 Parquet 文件的文件夹中正确创建。
我天真地认为,因为数据被索引和/或它具有元数据文件,所以获取数据大小等基本信息应该很快。例如,以下内容需要永远:
import dask.dataframe as ds
# `dataset_path` is the path to the folder
# containing all the Parquet files created above
# and the metadata files.
# It contains ~100-200 individual Parquet files
# for a total of ~60,000,000 rows
data = df.read_parquet(dataset_path)
data.shape[0].compute()
那除外吗?
另请注意,大多数列是int64
,float64
其中少数是object
(string
不同大小的。