2017-11-05 17 views
0

私は、ディスクの中にではなく、メモリに収まる大きなデータセットを処理しようとパンダとHDFStoreのpythonパンダ

でのpython 2.7を使用しています。

大きなサイズのデータ​​セットを.h5ファイルに保存すると、各列のデータサイズは一定ではありません。たとえば、1つの列には5行の文字列と1行の文字列があります。別の

最初の繰り返しに小さいサイズのデータ​​が含まれ、次のバッチに大きなサイズのデータ​​が含まれていた場合、繰り返しでファイルにデータを書き込む際に問題が発生しました。

私は問題がMIN_SIZEが適切に使用されなかったということであったとのデータが、私はエラー

colsLen = {} 
     for col in dbCols: 
      curs.execute('SELECT MAX(CHAR_LENGTH(%s)) FROM table' % col) 
      for a in curs: 
       colsLen.update({col: a[0]}) 

     # get the first row to create the hdfstore 
     rx = dbConAndQuery.dbTableToDf(con, table, limit=1, offset=0) #this is my utility that is querying the db 
     hdf.put("table", table, format="table", data_columns=True, min_itemsize=colsLen) 

     for i in range(rxRowCount/batchSize + 1): 
      rx = dbConAndQuery.dbTableToDf(con, table, limit=batchSize, offset=i * batchSize + 1) 
      hdf.append("table", table, format="table", data_columns=True, min_itemsize=colsLen) 

     hdf.close() 

なしH5にデータベースをキャッシュするために、次のコードを使用し、カラムに適合していなかったことがわかりました問題はです:各列のデータの最大サイズを事前に問い合わせることができない場合は、どうすればHDFStoreを使用できますか?例えば、メモリ制約のために反復でデータを取得または作成する。

ディスクデータフレームでdaskを使用してデータを処理できることがわかりましたが、パンダで必要な機能がいくつかあります。そのため、データを既存のHDFStoreファイルに追加するバッチ処理が主なアイデアです。

ありがとうございます!

答えて

0

私はこれを解決する2つの方法を見つけ

、問題は、HDFデータストレージを最適化し、各列の最大値の大きさを頼りにしていることが分かっ: 1.Preが取得するデータベースを照会各列の最大データ文字長 2.各バッチをファイル内の新しいキーに挿入して動作させると、各バッチはhdfファイルに挿入され、列の最大値として最大値を使用します。