在read_csv上加载dask并应用函数

时间:2018-03-09 15:14:09

标签: python dask

我试图加载一个 .csv,大小为4 GB 125百万行和5种类型的数据,我的计算机上有这样的功能:

  • CPU:Intel Core 2 Duo E7200 @ 2.53 GHz
  • RAM:8 GB DDR3 @ 1833 MHz
  • HD:500 GB 7200 rpm
  • 操作系统:Ubuntu 16.04

当我运行此代码时:

import dask.dataframe as dd
import numpy as np

dtypes = {'item_nbr':'int32', 'store_nbr':'int8', 'onpromotion':'bool' }
df_train = dd.read_csv('data/train.csv', dtype=dtypes, parse_dates=["date"], 
converters={'unit_sales': lambda u: np.log1p(float(u)) if float(u) > 0 else 0}, 
usecols=[1, 2, 3, 4, 5]).compute()

我的电脑只是冻结了,我需要重新启动它,这个问题有解决办法吗?

谢谢!

版:

目前我正在尝试投放:df_train.unit_sales.map_partitions(np.log1p).compute() 而我的电脑仍然处于冻结状态,那么,如何在不冻结电脑的情况下计算所有1.23亿行的logaritm?并且,如何检查计算是否安全?

1 个答案:

答案 0 :(得分:2)

正如评论中所述,当你在dask数据帧上调用.compute()时,你说“我现在已经完成了,请把它变成一个pandas对象”

在您的情况下,您可能不想立即执行此操作,您希望在执行其他查询,聚合等后执行此操作。

df = dd.read_csv('lots-of-data-*.csv')
df = df.compute()  # this is very large and may not fit in memory

df = dd.read_csv('lots-of-data-*.csv')
df = df[df.value > 0]
result = df.groupby('name').value.mean()
result = result.compute()  # this is probably much smaller