首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dask.dataframe.from_bcolz()立即开始处理

dask.dataframe.from_bcolz()立即开始处理
EN

Stack Overflow用户
提问于 2016-07-29 07:36:17
回答 1查看 69关注 0票数 1

我想知道为什么dd.from_bcolz()在被调用时立即开始做一些处理(当N列增加时会增长很多,并且有字符串类型的列)。

而且dd.read_hdf()在被调用时不会做太多的处理,但只有在使用dask.dataframe的时候--然后read_hdf()逐块读取和处理HDF5块……

我喜欢read_hdf现在的工作方式,唯一的问题是hdf5表的列不能超过1200列,并且dataframe不支持数组的列。而且hdf5格式毕竟不是基于列的……

代码语言:javascript
复制
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(n行)增长时,情况会变得更糟。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 09:15:07

看起来就像今天写的那样,from_bcolz会自动对对象数据类型列进行分类。因此,它对所有对象数据类型列进行完全读取,并对它们调用unique。您可以通过设置categorize=False来关闭此功能。

如果您认为应该更改此行为,请提出github问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38648363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档