繁体   English   中英

如何使用 dask 旋转一个非常大的数据框?

[英]How can I pivot a really large dataframe using dask?

我有一个像这样加载的 Dask 数据框:

dates_devices = dd.read_csv('data_part*.csv.gz', compression='gzip', blocksize=None) 
dates_devices['cnt'] = 1
dates_devices.astype({'cnt': 'uint8'}).dtypes # make it smaller

我正在尝试使用 dask 来旋转表格:

final_table = (dates_devices
               .categorize(columns=['date'])
               .pivot_table(index='device', 
                            columns='date', 
                            values='cnt').fillna(0).astype('uint8'))

那“运行”就好了,但是当我在dd.to_parquet()进行隐式计算时,我得到:

MemoryError: Unable to allocate 5.42 GiB for an array with shape (727304656,) and data type uint8

然后从这里拿走,我试过了

`$ echo 1 > /proc/sys/vm/overcommit_memory`

但内核仍然被杀死。 我在 Linux Xubuntu 上有 32GB RAM 和 32GB 交换,所以应该很适合 RAM。 有没有办法做到这一点或“测试”为什么我的内核被杀死了?

您可以尝试分块编写 dask 数据帧以克服内存限制:例如:

for i in range(final_table.npartitions):
    partition = final_table.get_partition(i)`

请看看我是怎么做.to_sql ——你可以对.to_sql采取类似的方法: https : .to_parquet

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM