2016-07-28 14 views
1

dd.from_bcolz()は、呼び出されたときにすぐに(N列が上がって文字列型の列がある場合に大きくなります)処理を開始するのだろうかと思います。dask.dataframe.from_bcolz()が直ちに処理を開始します

とdd.read_hdf()と呼ばれるときにはdask.dataframeが使用されている場合にのみ、多くの処理をしない - 私はどのようにread_hdf好き...その後read_hdf()は読み込み、チャンクによる処理HDF5チャンク

を現在、hdf5テーブルが〜1200カラムを超えることができない唯一の問題であり、dataframeは配列のカラムをサポートしていません。そして、HDF5フォーマットは...

In [1]: import dask.dataframe as dd 

In [2]: import pandas as pd 

In [3]: import bcolz, random 

In [4]: import numpy as np 

In [5]: N = int(1e7) 

In [6]: int_col = np.linspace(0, 1, N) 

In [7]: ct_disk = bcolz.fromiter(((i,i) for i in range(N)), dtype="i8,i8",\ 
    ...:       count=N, rootdir=r'/mnt/nfs/ct_.bcolz') 

In [8]: for i in range(10): ct_disk.addcol(int_col) 

In [9]: import dask.dataframe as dd 

In [10]: %time dd.from_bcolz(r'/mnt/nfs/ct_.bcolz', chunksize=1000000, lock=False) 
CPU times: user 8 ms, sys: 16 ms, total: 24 ms 
Wall time: 32.6 ms 
Out[10]: dd.DataFrame<from_bc..., npartitions=10, divisions=(0, 1000000, 2000000, ..., 9000000, 9999999)> 

In [11]: str_col= [''.join(random.choice('ABCD1234') for _ in range(5)) for i in range(int(N/10))]*10 

In [12]: ct_disk.addcol(str_col, dtype='S5') 

In [13]: %time dd.from_bcolz(r'/mnt/nfs/ct_.bcolz', chunksize=1000000, lock=False) 
CPU times: user 2.36 s, sys: 56 ms, total: 2.42 s 
Wall time: 2.44 s 
Out[13]: dd.DataFrame<from_bc..., npartitions=10, divisions=(0, 1000000, 2000000, ..., 9000000, 9999999)> 

In [14]: for i in range(10): ct_disk.addcol(str_col, dtype='S5') 

In [15]: %time dd.from_bcolz(r'/mnt/nfs/ct_.bcolz', chunksize=1000000, lock=False) 
CPU times: user 25.3 s, sys: 511 ms, total: 25.8 s 
Wall time: 25.9 s 
Out[15]: dd.DataFrame<from_bc..., npartitions=10, divisions=(0, 1000000, 2000000, ..., 9000000, 9999999)> 

とN(NROWS)が育つとき、それがさらに悪化していた後に、すべてのベース列ではありません。

答えて

0

今日のように書かれています。from_bcolzは、オブジェクトのdtype列を自動的に分類します。したがって、すべてのオブジェクトdtype列を完全に読み込み、uniqueを呼び出しています。これをオフにするには、categorize=Falseを設定します。

この動作を変更する必要があると思われる場合は、githubの問題を提起してください。

関連する問題