2016-07-28 2 views
1

dd.from_bcolz()가 호출 될 때 즉시 N 개의 열이 올라가고 문자열 유형 열이있을 때 증가하는 일부 처리를 시작하는 지 궁금합니다.dask.dataframe.from_bcolz()가 즉시 처리를 시작합니다.

그리고 dd.read_hdf()가 호출 될 때 dask.dataframe를 사용하는 경우에만, 많은 처리를하지 않습니다 - 내가 어떻게 read_hdf 좋아 ... 다음 read_hdf()을 읽고 덩어리로 처리 HDF5 덩어리

을 이제는 hdf5 테이블이 ~ 1200 열 이상을 가질 수없고 데이터 프레임이 배열 열을 지원하지 않는다는 유일한 문제가 있습니다. 그리고 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 문제를 제기하십시오.

관련 문제