2017-09-11 11 views
3

私は大きなデータセット(〜600 GB)をHDF5フォーマットとして保存しています。これは大きすぎてメモリに収まらないので、これをParquet形式に変換し、pySparkを使用していくつかの基本データ前処理(正規化、相関行列の検索など)を行いたいと思います。しかし、データセット全体をメモリにロードせずにParquetに変換する方法がわかりません。メモリにロードせずにHDF5をパーケットに変換する

私はこの要点:https://gist.github.com/jiffyclub/905bf5e8bf17ec59ab8f#file-hdf_to_parquet-pyを見ましたが、データセット全体がメモリに読み込まれているようです。

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() ... 

しかし、私は、私は、増分寄木を構築できるようになる任意のドキュメントを見つけることができません:私はインクリメンタル寄せ木ファイルにチャンクと省HDF5ファイルを読んでいたと考え

一つのことファイル。さらなる読書へのリンクがあれば幸いです。

答えて

5

これには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() 
+3

ここで、寄木細工のデータセットは多くのファイルで構成されています。単一の大きなファイルを入れる必要はないので、チャンクワイズアプローチは良い方法です。それは1000ファイルになる可能性があります –

関連する問題