read_csv 上的任务加载和应用功能
Dask load and apply funtion on read_csv
我正在尝试加载一个 .csv,大小为 4 GB,包含 1.25 亿行 和 5 种类型的数据我的电脑有这个功能:
- CPU:英特尔酷睿 2 双核 E7200 @ 2.53 GHz
- 内存:8 GB DDR3 @ 1833 MHz
- 高清:500GB 7200转
- OS: 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()
而我的 PC 仍然冻结,那么,如何在不冻结我的 PC 的情况下计算所有 1.25 亿行的对数?以及,如何检查调用计算是否安全?
如评论中所述,当您在 dask 数据帧上调用 .compute()
时,您说的是 "I am done now, please turn this into a pandas object"
在您的情况下,您可能不想立即执行此操作,而是希望在执行其他查询、聚合等之后执行此操作。
不好
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
我正在尝试加载一个 .csv,大小为 4 GB,包含 1.25 亿行 和 5 种类型的数据我的电脑有这个功能:
- CPU:英特尔酷睿 2 双核 E7200 @ 2.53 GHz
- 内存:8 GB DDR3 @ 1833 MHz
- 高清:500GB 7200转
- OS: 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()
而我的 PC 仍然冻结,那么,如何在不冻结我的 PC 的情况下计算所有 1.25 亿行的对数?以及,如何检查调用计算是否安全?
如评论中所述,当您在 dask 数据帧上调用 .compute()
时,您说的是 "I am done now, please turn this into a pandas object"
在您的情况下,您可能不想立即执行此操作,而是希望在执行其他查询、聚合等之后执行此操作。
不好
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