将HDF5转换为Parquet,无需加载到内存中

2024-04-23 20:11:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的数据集(~600gb)以HDF5格式存储。由于它太大,无法放入内存中,我想将其转换为Parquet格式,并使用pySpark执行一些基本的数据预处理(规范化、查找相关矩阵等)。但是,我不确定如何将整个数据集转换为Parquet而不将其加载到内存中。在

我看了这个要点:https://gist.github.com/jiffyclub/905bf5e8bf17ec59ab8f#file-hdf_to_parquet-py,但似乎整个数据集都被读入内存。在

我想到的一件事是将HDF5文件分块读取并将其增量保存到拼花板文件中:

test_store = pd.HDFStore('/path/to/myHDFfile.h5')
nrows = test_store.get_storer('df').nrows
chunksize = N
for i in range(nrows//chunksize + 1):
    # convert_to_Parquet() ...

但是我找不到任何文档可以让我逐步建立一个拼花地板文件。如有进一步阅读的链接,将不胜感激。在


Tags: 文件to数据store内存test格式规范化
1条回答
网友
1楼 · 发布于 2024-04-23 20:11:52

您可以使用pyarrow进行此操作!在

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq


def convert_hdf5_to_parquet(h5_file, parquet_file, chunksize=100000):

    stream = pd.read_hdf(h5_file, chunksize=chunksize)

    for i, chunk in enumerate(stream):
        print("Chunk {}".format(i))

        if i == 0:
            # Infer schema and open parquet file on first chunk
            parquet_schema = pa.Table.from_pandas(df=chunk).schema
            parquet_writer = pq.ParquetWriter(parquet_file, parquet_schema, compression='snappy')

        table = pa.Table.from_pandas(chunk, schema=parquet_schema)
        parquet_writer.write_table(table)

    parquet_writer.close()

相关问题 更多 >