python-3.x - dask_dataframe.compute() 是否需要执行
问题描述
我正在进行时间序列分析。我有一个约 6 亿行的 dask 数据框。我正在使用以下函数创建日期时间功能,
def get_date_features(data):
# generate date features
data['year'] = data['date'].dt.year
data['quarter'] = data['date'].dt.quarter
data['month'] = data['date'].dt.month
data['day'] = data['date'].dt.day
data['weekday'] = data['date'].dt.weekday
data['is_monthend'] = data['date'].dt.is_month_end * 1
data['is_monthstart'] = data['date'].dt.is_month_start * 1
data['is_quarterend'] = data['date'].dt.is_quarter_end * 1
data['is_quarterstart'] = data['date'].dt.is_quarter_start * 1
data['is_yearend'] = data['date'].dt.is_year_end * 1
data['is_yearstart'] = data['date'].dt.is_year_start * 1
data['dayofyear'] = data['date'].dt.dayofyear
data['weekofyear'] = data['date'].dt.weekofyear
data['daysinmonth'] = data['date'].dt.days_in_month
return data
data = get_date_features(data)
然后更改数据类型
cols = ['quarter', 'month', 'day','weekofyear', 'daysinmonth',
'weekday', 'is_monthend', 'is_monthstart', 'is_quarterend',
'is_quarterstart', 'is_yearend', 'is_yearstart', 'dayofyear'
]
for col in cols:
data[col] = data[col].astype(np.uint8)
for col in ['year']:
data[col] = data[col].astype(np.uint16)
当我检查 dtypes 时print(data.dtypes)
,我可以看到它们已转换,
year uint16
quarter uint8
month uint8
day uint8
weekday uint8
is_monthend uint8
is_monthstart uint8
is_quarterend uint8
is_quarterstart uint8
is_yearend uint8
is_yearstart uint8
dayofyear uint8
weekofyear uint8
daysinmonth uint8
当我运行data.visualize()
查看 dask 计算的并行化计划时,代码运行了一个多小时,我已经中止了它。我尝试运行data=data.compute()
,由于内存不足错误而中止。
我正在使用 16GB 内存。
data.compute()
在步骤之前占用了 ~2GB 的 RAM
执行时data.head()
,我可以看到前 5 行具有日期时间提取的特征,但data.shape.compute()
返回错误,'tuple' object has no attribute 'compute'
有没有必要跑到data.compute()
这里。此外,当我在此过程之后尝试merge
另一个数据帧(或)尝试生成滞后和分组特征时,执行因内存不足错误而中止。
dask是解决我的问题的正确工具,还是有任何其他 python 包可以帮助我解决这个问题?
另外,有没有办法在不增加 RAM 配置的情况下解决这个问题?非常感谢任何帮助/指导。
解决方案
该.visualize
方法使用 graphviz 库进行可视化。该库很慢,并且在数百个任务之外无法正常工作。
调用.compute
您的数据框会将整个结果作为单个熊猫数据框返回到内存中。如果您的数据太大,那么这将填满您的内存。也许您想使用类似to_csv
or的方法将结果存储到磁盘to_parquet
?
推荐阅读
- c++ - ASCII 到 dec 存储在字符串中
- python - 当 cv2.imread 接收 cv2.IMREAD_GRAYSCALE 作为参数时,数组的长度不同
- mysql - knex 中的动态查询
- c# - 在 Xamarin 中多次接收 firebase FCM 消息
- reactjs - 更新所有反应子组件
- python - 我的脚本有这个问题:TypeError: 'FirefoxWebElement' object is not iterable
- dart - 使用来自其他本地 dart 项目的 pub global activate --source 路径
- angular - Angular6:Mat-tree-node 选择/点击事件实现
- c++ - 限制输入并再次询问用户正确的范围
- vuejs2 - 无法使用 Element UI 和 iView UI Toolkit 在 Laravel 5.7 和 Vue 2 项目中加载字体