首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当存储在bcolz中时,数据大小会变小。

当存储在bcolz中时,数据大小会变小。
EN

Stack Overflow用户
提问于 2016-02-26 12:34:22
回答 1查看 544关注 0票数 1

我有一个数据集,有7m行和3列,两个数字和一个由20m不同的字符串uuid组成。这些数据以3G为csv文件,castra可以将其存储在大约2G中。我想用这些数据测试bcolz。

我试过了

代码语言:javascript
复制
odo(dask.dataframe.from_castra('data.castra'), 'data.bcolz')

它在耗尽磁盘上的节点和崩溃之前产生了70克的数据。

将这样的数据集放入bcolz的推荐方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 16:35:41

来自bcolz邮件列表上的Killian

通过pandas.read_csv()以块形式读取csv,将字符串列从Python转换为一个固定长度的numpy dtype,例如'S20',然后作为numpy数组追加到ctable。

此外,在ctable创建时设置chunklen=1000000 (或类似的),这将避免在/data文件夹下创建数百个文件(但可能不是压缩的最佳选择)。

上面的两个步骤对我很有用(2000万行,40-60列)。

试试这个:

代码语言:javascript
复制
df0 = ddf.from_castra("data.castra")
df = odo.odo(df0, pd.DataFrame)
names = df.columns.tolist()
types = ['float32', 'float32', 'S20']  # adjust 'S20' to your max string length needs
cols = [bcolz.carray(df[c].values, dtype=dt) for c, dt in zip(names, types)]

ct = bcolz.zeros(0, dtype=np.dtype(zip(names, types)), 
                    mode='w', chunklen=1000000, 
                    rootdir="data.bcolz")
ct.append(cols)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35651895

复制
相关文章

相似问题

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