【原创】Python处理海量数据的实战研究

Python爬虫之储存海量数据 存储数据 存储海量数据 数据持久化的首选方案应该是关系型数据库,关系型数据库的产品很多,包括:Oracle、MySQL、SQLServer、PostgreSQL等。如果要存储海量的低价值数据,文档数据库也是不错的选择,MongoDB是文档数据库中的佼佼者,之前我们已经讲解过MongDB的相关知识,在此不再进行赘述。 数据缓存 通过《网络数据采集和解析》一文,我们已经知道了如何从指定的页面中抓取数据... 阅读详情

最近看了July的一些关于Java处理海量数据的问题研究,深有感触,链接:http://blog.youkuaiyun.com/v_july_v/article/details/6685962

感谢July ^_^

他用的是Java的Hash Map等方法做了处理,讲解的非常深刻入骨


我也一时兴起,想拿Python试试刀,看看Python对于海量数据的处理能力如何。无奈在百度和Google输入“Python 海量数据”都无果。可能是国内使用python的不多,用python处理海量数据的就更少了。不过这浇灭不了我的欲望,哈哈


打算拿July的其中一个问题来试验一下:

海量日志数据,提取出某日访问百度次数最多的那个IP。

July给出的解决方案:
    方案1:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。
下手吧!


(一)生成数据

我首先构造1亿个IP,这些IP前两段都是“10.197”,后两段为0-255的随机数

把这1亿个IP存入一个文本文件中

Python代码如下:

__author__ = "Wally Yu (dayu.ebay@gmail.com)"
__date__ = "$Date: 2012/04/09 $"

def generateRandom(rangeFrom, rangeTo):
    import random
    return random.randint(rangeFrom,rangeTo)

def generageMassiveIPAddr(fileLocation,numberOfLines):
    IP = []
    file_handler = open(fileLocation, 'a+')
    for i in range(numberOfLines):
        IP.append('10.197.' + str(generateRandom(0,255))+'.'+ str(generateRandom(0,255)) + '\n')

    file_handler.writelines(IP)
    file_handler.close()

if __name__ == '__main__':
    from time import ctime
    print ctime()
    for i in range(10):
        print '  ' + str(i) + ": " + ctime()
        generageMassiveIPAddr('d:\\massiveIP.txt', 10000000)
    print ctime()

这里插一下,我的软件硬件环境:

硬件:

 - ThinkPad T420(CPU: i7, 内存16G)

软件:

 -OS: WinXP32位 (只认出3.6G内存)

 - Python:2.7


从Python的print日志中基本可以看出,生成一千万条IP地址大概需要1分钟,生成1亿条记录需要10分钟

占据硬盘空间:1.4G

日志:

Mon Apr 09 16:52:28 2012
  0: Mon Apr 09 16:52:28 2012
  1: Mon Apr 09 16:53:28 2012
  2: Mon Apr 09 16:54:29 2012
  3: Mon Apr 09 16:55:30 2012
  4: Mon Apr 09 16:56:32 2012
  5: Mon Apr 09 16:57:33 2012
  6: Mon Apr 09 16:58:36 2012
  7: Mon Apr 09 16:59:36 2012
  8: Mon Apr 09 17:00:36 2012
  9: Mon Apr 09 17:01:35 2012
Mon Apr 09 17:02:36 2012

(二)处理思路

假设现在可用内存仅为128M,而每行IP经计算需要14Byte

因为数据太大,把1亿条数据载入内存,再做排序会导致内存溢出。July的思想:“以大化小,分而治之”非常合适,我转化后的操作思路:

1. 每行IP需要14B空间,那么128M内存最多可以处理 128M / 14B = 9142857个IP

    把每36571429个IP拆成一个小文件保存起来,每个小文件的大小小于等于128M,共将生成11个文件

2. 对每个小文件用Hash Table处理,Python有自己非常高效的Hash Table:Dictionary!

    具体处理如下:

    1). 构建名为“Result”的Dictionary,“key”为IP地址,“value”为该IP地址出现的次数,用来记录11个文件每一个的最多出现的IP

    2). 构建名为“IP”的Dictionary,“key”为IP地址,“value”为该IP地址出现的次数,用来记录每一个小文件的所有IP地址

    3). 读入每一条IP地址到“IP” Dictio

使用Python分析14亿条数据 这次探索 确实 展示了,使用 numpy 和 初出茅庐的 pytubes 以及标准的商用硬件和 Python,在合理的时间内从十亿行数据的数据集中加载,处理和提取任意的统计信息是可行的,通过提取这些信息,处理不同长度的字符串数据的额外消耗被忽略掉了,但是我们仍然需要对比不同字符串的数值来区分哪些行数据是有我们感兴趣的字段的。使用一个简单的技巧,创建基于年份的数组,2008 个元素长度意味着每一年的索引等于年份的数字,因此,举个例子,1995 就只是获取 1995 年的元素的问题了。 阅读详情

相关推荐

Python大数据处理:利用Python处理海量数据

Pandas:用于数据清洗、预处理和分析的强大库。NumPy:提供高效的数值计算能力。Dask:适用于大规模数据集的并行计算库,可以处理比内存更大的数据。Matplotlib和Seaborn:用于数据可视化的库。

master_chenchen的博客 1132

Python在大数据处理中的应用:利用Pandas和Dask高效处理海量数据

本文探讨了Python中Pandas和Dask库在大数据处理中的应用。Pandas适用于中小规模数据,但受限于内存;而Dask通过分布式计算和分块处理技术,能够高效处理海量数据。文章对比了两者的性能、适用场景和使用方法,并提供了数据读取、清洗和转换的实践案例。最终指出,合理选择这两个工具可以满足不同规模的数据处理需求,未来分布式计算框架将更普及,帮助应对更复杂的大数据任务。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 779

Python优化加载大型数据集:高效处理海量数据的终极指南

Python高效处理大型数据集指南 本文介绍了5种优化大型数据集加载的方法:1)分块加载技术,通过Pandas分批处理数据;2)内存映射技术,利用Numpy直接映射磁盘文件;3)高效文件格式转换,对比CSV/HDF5/Parquet/Feather的特性;4)惰性加载方案,包括生成器实现和Dask框架应用;5)并行处理技术,使用Joblib实现多核加速。这些方法可解决内存溢出、加载缓慢等大数据处理瓶颈,显著提升海量数据的处理效率。文章包含具体代码示例和性能对比表格,为数据科学家提供了处理超大规模数据的实用工

闲人编程的博客 2484

海量数据处理中的正则表达式优化:Python 实战案例解析

正则表达式(Regex)在处理海量数据时可能成为性能瓶颈。本文探讨了Python中优化Regex的方法,包括避免复杂模式、使用非捕获组、减少贪婪匹配、预编译表达式等技巧。通过真实案例展示了如何优化日志文件处理,建议采用逐行读取和预编译来提升效率。合理优化Regex可显著提高大规模文本处理的性能表现。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 659

深入剖析 Python 正则表达式:海量数据处理中的高效信息提取策略

正则表达式(Regex)是数据处理中的高效工具,适用于文本匹配、提取和清洗。本文探讨Python中正则表达式的应用,重点介绍其在海量数据处理中的优化策略,包括预编译、非贪婪匹配和分批处理。通过日志分析、网页抓取等场景示例,展示如何利用正则表达式提升信息提取效率,并避免常见性能陷阱。掌握正则表达式技巧能显著提升大数据处理能力,是数据工程师的核心技能之一。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1062

Python 爬虫实战:多进程爬虫处理海量数据

本文系统讲解了Python多进程爬虫技术,通过知乎热榜案例对比单进程(128.56秒)、多线程(89.72秒)和多进程(22.38秒)的性能差异,验证了多进程方案在GIL规避和多核CPU利用上的优势(效率提升474%)。文章详细解析了multiprocessing.Pool实现原理、进程间通信机制,并提供进程池优化、数据分片存储、异常重试等进阶方案。针对海量数据爬取场景,强调了反爬策略、资源监控和数据一致性保障的关键要点,为开发者提供了一套完整的高效爬虫解决方案。

2503_91057718的博客 1921

思科网络进阶——多生成树协议(MSTP)配置的一课一得

三、实验拓扑1)设计一个网络架构,要有核心层和接入层,都使用思科交换机。2)企业有4个部门,要求这四个部门都可以上网,但分属不同的VLAN中,这样今后可以做其它安全策略以确保网络安全,这些策略如今后学到的访问控制列表ACL。3)网络架构的设计要具有冗余,防止一条线路或一台设备终端导致的业务中断。4)由于硬件冗余而产生的环路要处理好,也就是要在逻辑上(或者说通过配置)防止物理环路的产生。5)不能因为防止物理环路而导致某端口没有流量,这样浪费端口资源及设备间互联的带宽资源。

zhu52010的博客 3398

星载SAR系统参数设计过程自动化方法研究

 本文提出了一种 SAR系统参数自动化设计的 方法。首先,针对部分参数仍需手工选取的现状 建立了最优化求解模型,并给出了 PRF 和波位位 置的优化选取结果,使参数设计流程更加高效便 捷。然后,针对 SAR 系统参数设计过程中部分技 术指标的评测结果不满足用户需求时无法自动调 节的现状,采用 PID 控制器对方位向天线尺寸、信 号带宽、PRF 等参数进行自动调节,使得方位分辨 率、距离分辨率、方位模糊比等技术指标向用户需 求值逐步靠近。通过仿真实验验证了该方法的可 行性,实现了SAR系统参数设计过程的自动化

qq_43416206的博客 1522

开源数显表

开源数显表,广泛应用于车床、铣床、磨床、镗床、火花机、线切割等。市面上此类液晶数显表多数都是基于此项目。 一、基本配置 硬件 主控:STM32F407VGT6 LCD:群创AT070TN92 显示驱动:RA8875 光栅尺:3 x 输入(X/Y/Z) 串口:1 x MAX3232 继电器:2 x 输出 存储:AT24C64 模拟输入:LM324C 电源:AC 220V 软件 工程版本:Keil 5 STM32库:V1.4.0 图形界面:uCGUI 多语言支持:中文、英文 二、项目文

m0_70934529的博客 435

学Simulink--基于Simulink的无迹卡尔曼滤波(UKF)目标跟踪仿真建模示例

本文详细介绍了基于Simulink的无迹卡尔曼滤波(UKF)目标跟踪仿真建模方法。首先分析了UKF相比EKF在强非线性场景下的优势,包括无线性化误差、计算效率高和鲁棒性强等特点。接着阐述了UKF的核心原理,重点讲解了无迹变换(UT)的三个关键步骤:Sigma点生成、非线性传播和加权统计重构。文章还详细说明了二维机动目标的状态向量定义、非线性状态转移模型和雷达观测模型。 在Simulink实现部分,提供了完整的建模步骤和核心代码,包括目标运动模型、雷达传感器模型和UKF算法模块的实现。通过蛇形机动场景的仿真实

xiaoheshang_123的博客 89

解决MiGPT部署痛点:小米账号异地登录安全验证的解决方案

为让小米音箱更智能🤖,部署MiGPT时遇到小米账号异地登录验证问题,手动验证后仍无法解决。本文分享亲测有效的简化方案✨:通过浏览器F12获取passToken📝,手动创建mi.json配置文件并挂载到Docker容器,无需本地运行MiGPT,直接绕过异地验证,附完整操作步骤和问题排查指南。

XiaoqiangClub的博客 1437

QGis二次开发 —— 1、win10/win11搭建Vs2017-QGis3.40.12环境(附Vs2017环境效果,附全部问题解决方法)(附:Qt助手加入QGis接口说明文档)

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGisA接口说明文档)

1362

基于SpringBoot 3 + Vue 3的全栈民宿预约管理系统设计与实现

文章将详细阐述系统的需求分析、架构设计、数据库设计、核心功能模块的实现(包括用户认证、房源管理、订单流程、支付集成等),并提供关键代码片段,最后对系统进行总结与展望。.requestMatchers("/api/admin/**").hasRole("ADMIN") // 管理员接口。.requestMatchers("/api/auth/**").permitAll() // 认证接口公开。.requestMatchers("/api/public/**").permitAll() // 公开资源。

2201_76125393的博客 272

别再盯着那 100 条数据了,RAP OData 分页机制到底在保护什么

摘要: SAP BTP ABAP Environment 的 OData 服务默认采用分页保护机制,未指定 $top 时仅返回100条数据并附带下一页链接。这种设计旨在防止资源滥用,而非服务故障。客户端应遵循OData协议规范,直接使用服务端返回的 next link 进行分页请求,而非自行构造URL。当指定 $top 参数时,若数值超过5000仍会被强制分页。该机制在SAPUI5控件中被自动处理,但自定义客户端需主动实现分页逻辑。对于自定义实体(Custom Entity),开发者需在Query Prov

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 859

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: Python-Django 使用 Hudson做CI服务器实践记
下一篇: Python 和 VBScript 对文件编码-解码的方式 (Hex, Base64) 的疑问
Wally_Yu
博客等级 码龄19年 71粉丝 28原创
评论 30
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值