- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试使用以下代码在大型数据帧上删除重复的时间戳时,出现了 MemoryError
。
import dask.dataframe as dd
path = f's3://{container_name}/*'
ddf = dd.read_parquet(path, storage_options=opts, engine='fastparquet')
ddf = ddf.reset_index().drop_duplicates(subset='timestamp_utc').set_index('timestamp_utc')
...
分析表明,它在包含约 4000 万行数据的 265MB 压缩 Parquet 文件的数据集上使用了约 14GB 的 RAM。
有没有其他方法可以在 Dask 不使用太多内存的情况下删除数据上的重复索引?
下面的回溯
Traceback (most recent call last):
File "/anaconda/envs/surb/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/anaconda/envs/surb/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/chengkai/surbana_lift/src/consolidate_data.py", line 62, in <module>
consolidate_data()
File "/home/chengkai/surbana_lift/src/consolidate_data.py", line 37, in consolidate_data
ddf = ddf.reset_index().drop_duplicates(subset='timestamp_utc').set_index('timestamp_utc')
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/dataframe/core.py", line 2524, in set_index
divisions=divisions, **kwargs)
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/dataframe/shuffle.py", line 64, in set_index
divisions, sizes, mins, maxes = base.compute(divisions, sizes, mins, maxes)
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/base.py", line 407, in compute
results = get(dsk, keys, **kwargs)
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/threaded.py", line 75, in get
pack_exception=pack_exception, **kwargs)
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/local.py", line 521, in get_async
raise_exception(exc, tb)
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/compatibility.py", line 67, in reraise
raise exc
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/local.py", line 290, in execute_task
result = _execute_task(task, data)
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/local.py", line 270, in _execute_task
args2 = [_execute_task(a, cache) for a in args]
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/local.py", line 270, in <listcomp>
args2 = [_execute_task(a, cache) for a in args]
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/local.py", line 267, in _execute_task
return [_execute_task(a, cache) for a in arg]
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/local.py", line 267, in <listcomp>
return [_execute_task(a, cache) for a in arg]
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/local.py", line 271, in _execute_task
return func(*args2)
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/dataframe/core.py", line 69, in _concat
return args[0] if not args2 else methods.concat(args2, uniform=True)
File "/anaconda/envs/surb/lib/python3.6/site-packages/dask/dataframe/methods.py", line 329, in concat
out = pd.concat(dfs3, join=join)
File "/anaconda/envs/surb/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 226, in concat
return op.get_result()
File "/anaconda/envs/surb/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 423, in get_result
copy=self.copy)
File "/anaconda/envs/surb/lib/python3.6/site-packages/pandas/core/internals.py", line 5418, in concatenate_block_manage
rs
[ju.block for ju in join_units], placement=placement)
File "/anaconda/envs/surb/lib/python3.6/site-packages/pandas/core/internals.py", line 2984, in concat_same_type
axis=self.ndim - 1)
File "/anaconda/envs/surb/lib/python3.6/site-packages/pandas/core/dtypes/concat.py", line 461, in _concat_datetime
return _concat_datetimetz(to_concat)
File "/anaconda/envs/surb/lib/python3.6/site-packages/pandas/core/dtypes/concat.py", line 506, in _concat_datetimetz
new_values = np.concatenate([x.asi8 for x in to_concat])
MemoryError
最佳答案
数据在内存中变得非常大也就不足为奇了。就空间而言,Parquet 是一种非常有效的格式,尤其是使用 gzip 压缩时,字符串都变成了 python 对象(内存占用如此之大)。
此外,您还有许多工作线程在整个数据帧的某些部分上运行。这涉及数据复制、中间和结果的连接;后者在 pandas 中效率很低。
一个建议:您可以通过为 read_parquet
指定 index=False
来删除一个步骤,而不是 reset_index
。
下一个建议:将您使用的线程数限制为小于默认值,这可能是您的 CPU 核心数。最简单的方法是在进程中使用分布式客户端
from dask.distributed import Client
c = Client(processes=False, threads_per_worker=4)
最好先设置索引,然后使用 map_partitions
执行 drop_duplicated 以最小化跨分区通信。
df.map_partitions(lambda d: d.drop_duplicates(subset='timestamp_utc'))
关于Dask - 删除重复索引 MemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51301034/
我试图在一个非 Django 特定的共享虚拟主机上部署 Django。 Host 提供旧版本的 python 安装,但由于我有 ssh 访问能力,我设法通过在我的主文件夹中本地安装它们来使用我需要的模
我是初学者。我最近看到 Mandelbrot set 太棒了,所以我决定用 python 绘制这个集合。但是有一个问题,当我运行这段代码时出现“内存错误”。 这条语句 num_set = gen_nu
假设以下情况:我得到了一个双模网络的邻接矩阵,其中一个维度代表一些项目(帖子)和每个项目下出现的其他标签。现在我想折叠那个双模式网络以获得一个单模式网络的项目到项目关系,其中每个链接的值代表两个项目的
我正在尝试通过从文件中读取数据来绘制具有多种颜色的热图。我可以很好地生成 2D 和法线热图,但无法像附加图像那样绘制。当使用随机数时,我可以绘制它但是在从文件中读取数据时它显示错误。 上面的热图是用随
我正在尝试从维基百科文本数据中训练word2vec模型,因为我正在使用以下代码。 import logging import os.path import sys import multiproces
处理.xml文件= 1,45 Gb时出现MemoryError错误。我试图在一个较小的文件上运行它,并且它可以工作,因此代码中不应有任何错误。该代码本身意味着打开一个xml文件,在其中做一些事情并将其
当我尝试使用以下代码在大型数据帧上删除重复的时间戳时,出现了 MemoryError。 import dask.dataframe as dd path = f's3://{container_nam
尝试分割非常大的字符串时出现内存错误。 data = load_data(file_name) # loads data string from file splited_data = data.sp
我需要扫描两个大的 txt 文件(都是大约 100GB,10 亿行,几列)并取出某一列(写入新文件)。文件看起来像这样 ID*DATE*provider 1111*201101*1234 1234*2
我在第 3 轮 nfind(while 循环)中执行的代码有什么问题,返回符合 CACHE[sha] = number 的 MemoryError?在系统上有足够的内存,并且在 while 循环的每一
我试图避免在我的 mp3 收藏中重复(非常大)。我想通过检查文件内容来检查重复项,而不是查找相同的文件名。我已经编写了下面的代码来执行此操作,但它会在大约一分钟后抛出 MemoryError。关于如何
我正在尝试编写一个程序来计算给定字符串 s 中字符 'a' 的出现次数,只考虑第一个 字符串的 n 个字符。如果字符串的长度小于数字 n,例如 s = "abca" 和 n = 10,则 s 应该变成
我的环境是 Python 3.6 64 位和 64 位 win 10 16GB 内存。 我有一个形状为 (260923,) 的 ndarray。我想找到大于阈值的所有元素的索引。我正在使用这段代码,但
我遇到了一个奇怪的MemoryError,我不明白它为什么会出现。代码示例: # some setup import numpy as np import pandas as pd import ra
我正在尝试处理一个 3GB 的 XML 文件,并且在读取文件并将一些数据存储在字典中的循环中间出现内存错误。 class Node(object): def __init__(self, os
我正在处理一个包含大数据的项目,在运行我的脚本时经常遇到 MemoryError。它在我的脚本读取的文件列表上包含一个循环,在 3 或 4 个文件之后,出现此错误。 我想写这样的东西: with op
我正在尝试对一堆图像(>40k)执行平均缩放。当我将大小为 (3,256,256) 的图像读入 np 数组时,内存使用率为 %40(60 GB 中,使用 htop 检查)。但是,当我运行 arr.st
我有一个小的 Python (2.7.10) 脚本,您可以在下面看到它。 def numbers_calc(max_num, num_step): """Returns every numbe
我正在编写一个 python 脚本来读取两个 csv 文件。代码片段如下。如果文件包含少量记录(8,000 条),则代码可以完美运行,但是如果文件包含大量记录(120,000 条),我会在线上遇到 M
我有一段 python 代码会在一段时间后生成一个 MemoryError。我知道它会消耗大量内存。因此,我决定将代码放在 try/except block 中,这样框架看起来如下所示: while
我是一名优秀的程序员,十分优秀!