-
2020-11-01 12:01:18
最近编写并运行了一个处理1500万个数据的程序,本来最初每秒可以处理150个左右的数据,预计大概15个小时的时间就可以处理完,晚上的时候就开始运行,本以为等到第二天中午就可以得到结果呢,,,
可是,等我第二天的时候一看,什么???还没处理完,当前的数据处理速度变成了一秒5个左右,然后还需要等待300个小时。
然后就查了一下这个问题,原来同样也有很多人在处理大数据的时候遇到了这个问题,大多数的文章分析的原因都是说由于GC(垃圾回收)造成的性能下降。
Python的垃圾回收机制的工作原理为每个对象维护一个引用计数,每次内存对象的创建与销毁都必须修改引用计数,从而在大量的对象创建时,需要大量的执行修改引用计数操作,对于程序执行过程中,额外的性能开销是令人可怕的。回收的触发时机有两种可能,一是用户主动调用gc.collect(),二是对象数量超过阈值。
所以正是GC拖慢了程序的性能,所以我们可以考虑在处理的时候禁止垃圾回收。
代码:
import gc
gc.disable();
#程序处理部分
gc.enable();
通过这样的改进之后速度确度会有很大的提升。但是又有也会另外的一个问题,内存溢出,由于运行的过程中生成大量的对象,一次使用后就没有了引用,由于关闭了垃圾回收机制,一直存在内存中得不到清理,然后程序的内存使用量越来越大。解决的方法就是定期打开gc.enable()再关闭或者主动调用gc.collect(),这样就可以了。
通过上述的改进后程序确实了很多,可是我的程序还是运行的越来越慢,我都怀疑人生了,然后分别测试了各个步骤所花费的时间才知道了原因,我使用了pandas创建一个DataFrame,然后每次迭代得到的结果都添加新的数据到DataFrame中,随着里边的数据越来越多,添加的速度也就越来越慢了,严重的拖累的运行速度。这里的解决方法有两个:
1 分段保存结果,间隔一段时间就保存一次结果,最后再将多次的结果合并。
2 换一个数据存储方法,我是直接使用了python的字典进行保存结果,它随着数据的增多添加的速度也会变慢,但是差别不是很大,在可接受的范围内,可以使用;或者再加上方法1,分段进行保存再合并也是可以的。
更多相关内容 -
C# Socket 客户端服务端封装 支持多连接处理 Tasks多线程 队列处理 大数据拆分包处理
2018-01-15 19:39:28Socket 客户端代码封装、服务端代码封装,让使用Socket更简单。 同时服务端支持超过客户端连接(测试超过1万个同时连接稳定运行),Tasks多线程 队列处理 大数据拆分包处理 -
python使用pandas处理大数据节省内存技巧(推荐)
2020-09-19 09:58:31主要介绍了python使用pandas处理大数据节省内存技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
前端大数据导入,异步处理
2021-04-28 19:14:53前端读取excel,分批传输到后台,实现前端大数据导入功能 -
通过 MATLAB 处理大数据
2018-08-20 09:14:17原文链接:通过MATLAB处理大数据 大数据指的是创建的数据和供分析的数据的数量与速率迅速增加。大数据使分析师和数据专家有机会获得更好的见解,进行更明智的决策,但是它同时也会带来许多的挑战:可用的内存可能...原文链接:通过MATLAB处理大数据
大数据指的是创建的数据和供分析的数据的数量与速率迅速增加。大数据使分析师和数据专家有机会获得更好的见解,进行更明智的决策,但是它同时也会带来许多的挑战:可用的内存可能无法足以处理大数据集,可能需要花太久的时间进行处理或可能流动太快而无法存储标准算法通常不能以合理的时间或内存来处理大数据集等等。目前没有任何一种单一方法可以处理大数据。为此,MATLAB提供了许多工具来解决这些挑战。
在MATLAB中处理大数据
1. 64位计算。
64位版本的MATLAB可快速增加内存中可保留的数据量 - 通常可达到任意32位程序的2000倍.32位程序限制您只能使用2 GB的内存,而64位MATLAB的内存可以达到操作系统的物理内存限制。对于Windows 8,台式机内存为500 GB,Windows Server内存为4 TB。
2.内存映射的变量。
借助MATLAB中的memmapfile函数,您可以将文件或文件的一部分映射到内存中的MATLAB变量。这样,您就可以高效访问磁盘上由于太大而无法保留在内存中或需要花太长时间而无法加载的大数据集。
磁盘变量。
matfile函数使您可以直接从磁盘上的MAT文件访问MATLAB变量(使用MATLAB索引命令),无需将全部变量加载到内存。这使您可以在大数据集上进行块处理,这些大数据集因为太大而无法保存在内存中。
4.内在的多核数学。
MATLAB中的许多内置数学函数,如fft,inv和eig都是多线程的。通过并行运行,这些函数充分利用计算机的多核,提供高性能的大数据集计算。
5. GPU计算。
如果您正在使用GPU,并行计算工具箱中的GPU优化的数学函数可以为大数据集提供更高的性能。
6.并行计算。
并行计算工具箱提供并行用于循环,该循环在多核计算机上并行运行您的MATLAB代码和算法。如果您使用MATLAB Distributed Computing Server,则可以在机器群集上并行执行,这些机器可扩展到数千台计算机。
7.云计算。
对于数百或数千台计算机的按需并行处理,您可以在Amazon Elastic Computing Cloud(亚马逊弹性计算云)(EC2)上使用MATLAB Distributed Computing Server并行运行MATLAB计算。借助云计算,您无需购买或维护您自己的群集或数据中心就可以处理大数据。
8.分布式阵列。
使用并行计算工具箱和MATLAB DistributedComputing Server,您可以处理分布在计算机群集内存中的矩阵和**数组。使用此方法,您可以针对因太大而无法由单台计算机内存处理的大数据集,进行存储和执行计算。
9.流式算法。
使用系统对象,您可以对因太大或太快而无法保留在内存中的数据传入流执行流式处理。此外,您还可以使用MATLAB编码器通过MATLAB算法生成嵌入式C / C ++代码,并针对高性能实时系统运行产生的代码。
10.图像块处理。
使用图像处理工具箱中的blockproc函数,您可以处理特别大的图像,方法是每次以模块的形式高效处理它们。与并行计算工具箱一起使用时,在多核和GPU上并行运行计算。
11. 机器学习。
机器学习有助于通过大数据集提取见解和开发预测性模型。广泛的机器学习算法,包括 Statistics and Machine Learning Toolbox 和 Neural Network Toolbox 中提供的促进式 (boosted) 。袋装 (bagged) 决策树、K 均值和分层聚类、k-最近邻搜索、高斯混合、期望最大化算法、隐马尔可夫模型和神经网络。
-
启用源代码分析技术处理大数据.pdf
2021-09-11 10:59:49启用源代码分析技术处理大数据 安全管理 数据分析 安全管理 大数据 信息安全 -
用Pandas 处理大数据的3种超级方法
2019-05-31 13:41:20易上手, 文档丰富的Pandas 已经成为时下最火的数据处理库。此外,Pandas数据处理能力也一流。 其实无论你使用什么库,大量的数据处理起来往往回遇到新的挑战。 数据处理时,往往会遇到没有足够内存(RAM)这个硬件...原文链接:3 simple ways to handle large data with
Pandas
作者 | George Seif
译者 | jojoa易上手, 文档丰富的Pandas 已经成为时下最火的数据处理库。此外,Pandas数据处理能力也一流。
其实无论你使用什么库,大量的数据处理起来往往回遇到新的挑战。
数据处理时,往往会遇到没有足够内存(RAM)这个硬件问题。 企业往往需要能够存够数百, 乃至数千 的GB 数据。
即便你的计算机恰好有足够的内存来存储这些数据, 但是读取数据到硬盘依旧非常耗时。
别担心! Pandas 数据库会帮我们摆脱这种困境。 这篇文章包含3种方法来减少数据大小,并且加快数据读取速度。 我用这些方法,把超过100GB 的数据, 压缩到了64GB 甚至32GB 的内存大小。快来看看这三个妙招吧。
数据分块
csv 格式是一种易储存, 易更改并且用户易读取的格式。 pandas 有read_csv ()方法来上传数据,存储为CSV 格式。当遇到CSV 文件过大,导致内存不足的问题该怎么办呢?试试强大的pandas 工具吧!我们先把整个文件拆分成小块。这里,我们把拆分的小块称为chunk。
一个chunk 就是我们数据的一个小组。 Chunk 的大小主要依据我们内存的大小,自行决定。
过程如下:
1.读取一块数据。
2.分析数据。
3.保存该块数据的分析结果。
4.重复1-3步骤,直到所有chunk 分析完毕。
5.把所有的chunk 合并在一起。我们可以通过read_csv()方法Chunksize来完成上述步骤。 Chunksize是指pandas 一次能读取到多少行csv文件。这个当然也是建立在RAM 内存容量的基础上。
假如我们认为数据呈现高斯分布时, 我们可以在一个chunk 上, 进行数据处理和视觉化, 这样会提高准确率。当数据稍微复杂时, 例如呈现泊松分布时, 我们最好能一块块筛选,然后把每一小块整合在一起。 然后再进行分析。很多时候, 我们往往删除太多的不相关列,或者删除有值行。 我们可以在每个chunk 上,删除不相关数据, 然后再把数据整合在一起,最后再进行数据分析。
代码如下:
删除数据有时候, 我们一眼就能看到需要分析的列。事实上, 通常名字,账号等列,我们是不做分析的。
读取数据前, 先跳过这些无用的列,可以帮我们节省很多内存。 Pandas 可以允许我们选择想要读取的列。
把包含无用信息的列删除掉, 往往给我们节省了大量内存。此外,我们还可以把有缺失值的行,或者是包含“NA” 的行删除掉。 通过dropna()方法可以实现:
有几个非常有用的参数,可以传给dropna():- how: 可选项:“any”(该行的任意一列如果出现”NA”, 删除该行)
- “all” (只有某行所有数数据全部是”NA” 时才删除)
- thresh: 设定某行最多包含多少个NA 时,才进行删除
- subset: 选定某个子集,进行NA 查找
可以通过这些参数, 尤其是thresh 和 subset 两个参数可以决定某行是否被删除掉。
Pandas 在读取信息的时候,无法删除列。但是我们可以在每个chunk 上,进行上述操作。
为列设定不同的数据类型
数据科学家新手往往不会对数据类型考虑太多。 当处理数据越来越多时, 就非常有必要考虑数据类型了。
行业常用的解决方法是从数据文件中,读取数据, 然后一列列设置数据类型。 但当数据量非常大时, 我们往往担心内存空间不够用。
在CSV 文件中,例如某列是浮点数, 它往往会占据更多的存储空间。 例如, 当我们下载数据来预测股票信息时, 价格往往以32位浮点数形式存储。
但是,我们真的需要32位浮点数码? 大多数情况下, 股票价格以小数点后保留两位数据进行交易。 即便我们想看到更精确的数据, 16位浮点数已经足够了。
我们往往会在读取数据的时候, 设置数据类型,而不是保留数据原类型。 那样的话,会浪费掉部分内存。
通过read_csv() 中设置dtype参数来完成数据类型设置。还可以设置字典类型,设置该列是键, 设置某列是字典的值。
请看下面的pandas 例子:
文章到这里结束了! 希望上述三个方法可以帮你节省时间和内存。 -
big-data-challenge:大数据作业-“ Alexa,您可以处理大数据吗?”
2021-03-21 06:14:21大数据挑战 大数据作业-“ Alexa,您可以处理大数据吗?” -
JDBC使用MySQL处理大数据+事务控制管理.txt
2018-11-15 15:37:21JDBC使用MySQL处理大数据+事务控制管理.txt -
流计算大数据技术在运营商实时信令处理中的应用
2021-01-19 20:49:55针对运营商动态数据信息开放大数据平台的实时信令处理要求,对流式计算大数据组件进行了分析,介绍了与流计算大数据相关的实时采集、汇聚和处理组件,形成了端到端实时信令处理大数据技术解决方案,并提出了融合... -
Matlab 处理大数据
2014-10-20 19:17:11MATLAB如何处理大数据,应用灵活,适用于经济、金融、数学等各领域 -
大数据认知(一)之为什么使用Hadoop生态系统处理大数据而不是高性能关系型数据库
2016-09-11 21:51:44为什么使用Hadoop生态系统处理大数据而不是高性能关系型数据库 面对这样的问题,不知道大家会什么样的思考,建议大家先思考一下然后带着自己的答案,在来看看我的看法。当然,这只是我个人的见解并非绝对的标准,...为什么使用Hadoop生态系统处理大数据而不是高性能关系型数据库
面对这样的问题,不知道大家会什么样的思考,建议大家先思考一下然后带着自己的答案,在来看看我的看法。当然,这只是我个人的见解并非绝对的标准,其实这也没有一个固定的答案。
在设计使用分布式Hadoop生态系统,如使用HDFS进行冗余、高容错地存储大数据、使用MapReduce分布式并行离线处理大数据等。而没有使用高效性能的关系型数据库,尽管关系型数据库可以快速处理用户事务数据,可以实现较为复杂的表间关联操作等。首先,是因为考虑磁盘瓶颈的原因,磁盘读写最大的瓶颈就是处理速度,如今的磁盘一般可能在100MB/S或者可能再好一些,但是就是这样的读取速度,如果要读取1TB的数据大约要2.5小时。那么面对如今动辄几百TB,有时甚至是更加庞大的PB级数据(随着数据量增大,更加大级也必然到来)。因为磁盘是寻址读取方式,而且通常是要读取所有的数据才能进行操作,可想如果是几百TB的数据,那么可能就读取就需要几百上千个小时。那么如果能把数据分散在多台机器上并行读取那么理论上其速度必然是大幅度提升,如1TB存放在100个磁盘上,那么每个存放10GB的数据,读取完1TB数据大约需要100S。而且HDFS提供的是流式数据处理,也就是数据读取部分即可处理而并非读取所有数据。可能会问这样怎么对数据做整体操作,这个问题被考虑在MapReduce框架中,因为MapReduce计算框架天生就是key-value形式,然后对数据块不到merge的过程。所以最终经过MapReduce的数据会完成整体性的。所以在当前大数据如此盛行、需求量如此大的情况下,考虑磁盘因素应该是使用Hadoop等生态系统的首要因素。
再有大家应该了解,一般提升性能的方式可能有两种,一种是垂直提升也就是通过不断地加大内存、cpu、硬盘等方式来提高单独服务器的性能,还有一种是水平提升也就是通过利用分布式不断添加机器到集群的方式。通过使用垂直提升方式,必然会达到一定的极限,就抛开这个硬件的极限认为它可以根据需要不断地提升,那么这样提升的费用也是昂贵的。而且对于存储数据仓库信息,这里还存在着单点故障的问题。而如果使用分布式形式,那么扩展通常就是简单的添加机器附上平台软件即可,操作十分简便。而且设计也可以利用其一些相对报废的机器组成集群,而且这样的分布式系统一般都会存储多份数据形成高容错。
再者,是关系型数据库在针对处理数据表直接复杂的关联操作等便利,而Hadoop生态系统中的HBase数据库则不可以做这样的复杂关联操作。如果说Hive可以实现,那么Hive的一般延迟是不符合数据库要求的,它是数据仓库。但是一般对大数据处理通常是不需要进行复杂的关联操作,基本上都是行列的分析与处理。所以Hadoop平台就是考虑了大数据的特性而诞生的产品。当然,不能说Hadoop就比关系型数据库强了,应该说是具体问题具体对待、各有千秋,在处理事务和用户交互等数据方面,关系型数据库占据了不可动摇的地位。而且关系型数据库产品多样,技术也相对十分成熟。还有一点在使用关系型数据库时,一般分为两层sql level 和 读取数据,而其中sql层就是实现把查询语句分解、优化、形成搜索树等,这一套逻辑十分耗时。而NoSQL就是弱化了sql 层,只留下了提取数据层,所以相对的在处理大数据上HBase会更加快速。
随着Hadoop的不断发展,其家族产品也陆续登场,如Hive、HBase、Spark、Storm、Mahout等等,这些都是为了满足特定的大数据场景需求而产生的。所以相对于使用场景已基本固化的关系型数据库,Hadoop就显得更加合理、适用。而且Hadoop等都是开源项目,有开源社区和大多技术者的支持,所以其发展和维护等也在向着越来越好的方向发展。而且在做数据仓库等时,关系型数据主要基于SQL语言,而Hadoop有SQL型、Java、Python等,融入的技术人才多样性,也必然会推导项目业务的多样化健康化发展。
以上即为为个人看法,如果认为有误的或者有遗漏的,欢迎大家留言补充。
-
R语言ffbase包读取并处理大数据集
2016-08-25 12:35:49R语言中data.table包用于处理大数据集(GB级或TB级),但其无法逃掉内存不足的限制,对于电脑内存只有4G或8G的我们来说会把内存撑爆,不知道你有没有这个体验,真是令人头痛,据说ff包的read.table.ffdf()函数可以把... -
处理大数据需要哪些技术
2020-08-27 13:51:52那么具体处理大数据需要哪些技术,今天我们来简单介绍一下大数据核心技术。 大数据处理,其实最主要的支撑技术就是分布式和并行计算、大数据云以及大数据内存计算。 大数据的分布式和并行计算 ... -
Python处理大数据越来越慢的问题
2014-12-20 19:03:25Python处理大数据越来越慢的问题 Python在对大数据进行处理时,发现随着数据处理量的增大,性能急剧下降。查找原因发现是由于GC(垃圾回收)造成的性能下降。 Python的垃圾回收机制的工作原理为每个对象... -
处理大数据量excel
2019-04-03 01:32:10NULL 博文链接:https://domcafe.iteye.com/blog/1472399 -
大数据流式处理技术
2017-11-06 16:36:26大数据流式处理技术大数据流式处理技术大数据流式处理技术大数据流式处理技术 -
大数据常见的处理方法有哪些
2022-03-17 10:11:09对于的处理任务,通常采用抽样策略。抽样的过程中应当分析抽样的规模,以及如何抽样才能实现类似于原数据的分布。常用的数据处理方法如下: 1)聚类分析:按照数据对象的相似度,把数据对象划分聚集簇,簇内对象... -
大数据分布式数据处理系统,主要分为哪两种?
2019-04-18 11:19:32大数据的处理模式分为流处理和批处理两种。...因此,如果要求实时的处理大数据,必然要求采用分布式的方式,在这种情况下,除了应该考虑分布式系统的一致性问题,还将涉及到分布式系统网络时延的影响,这都增加... -
.net与windows服务器是如何处理大数据的?
2015-03-27 01:24:50如题,好多大公司或大的网站平台都换上linux+php了,试问下,有人知道微软的系统以及他们所推崇的 .net是如何支撑大数据和大量用户同时在线的吗? -
气象大数据分析处理系统 气象大数据平台建设.ppt
2021-06-18 09:59:00气象大数据分析处理系统,气象大数据平台建设 -
流式大数据实时处理技术、平台及应用
2021-01-20 04:23:55大数据处理系统根据其时效性可分为批式大数据和流式大数据两类。上述两类系统均无法满足“事中”感知查询分析处理模式的需求。为此,从分析大数据应用场景入手,提出了“流立方”流式大数据实时处理技术和平台,在... -
大数据:互联网大规模数据挖掘与分布式处理.pdf
2021-07-14 16:09:26大数据:互联网大规模数据挖掘与分布式处理.pdf -
Hadoop大数据常见问题及处理方法.docx
2021-06-25 16:08:25Hadoop大数据常见问题及处理方法,使用 hive 自带的 concatenate 命令,自动合并小文件 -
信号处理与大数据 pdf
2017-10-20 09:10:15浙江省信号处理学会2015年10月召开学术年会,本次年会主题是“信号处理在‘大数据’”,相关内容包括:统计信号处理基础理论;大数据的存储、传输及并行处理;面向大数据的统计信号处理;阵列信号处理;时频谱分析及... -
信息安全技术 大数据安全管理指南.pdf
2021-07-31 10:03:11大数据技术的发展和应用影响着国家的治理模式、...本标准指导拥有、处理大数据的企业、事业单位、政府部门等组织做好大数据的安全管理、风险评估等工作,有效、安全地应用大数据,采用有效技术和管理措施保障数据安全。 -
处理大数据的四个步骤
2015-11-09 23:27:24处理大数据的四个步骤: 收集:原始数据种类多样,格式、位置、存储、时效性等迥异。数据收集从异构数据源中收集数据并转换成相应的格式方便处理。存储:收集好的数据需要根据成本、格式、查询、业务逻辑等需求,... -
大数据-互联网大规模数据挖掘与分布式处理.pdf
2021-04-09 00:26:44大数据-互联网大规模数据挖掘与分布式处理 -
大数据缓存处理
2018-06-17 09:34:02大数据缓存处理解决方案,参见博客地址:https://blog.csdn.net/yangxiaobo118/article/details/80716709,内涵数据库文件,分布式项目文件,部署文档,以及演示录像。 -
图像处理图像处理,大数据分类
2015-12-27 22:22:17图像处理,大数据分类图像处理,大数据分类