大数据实战

需求:现有一个1000万行数据的日志文件,每行数据用TAB来分割,它们是userId,gameId,gameScore(用户ID,游戏ID(1--10),该用户在该游戏的这次得分),当数据库中的数据出现丢失,现在要根据该日志文件的记录来恢复数据库中的数据,也就是将该日志中的数据插入到数据库中。数据库中有四个字段:userId,gameId,maxScore,times,这个times是该玩家玩这个游戏的次数,maxScore是玩这个游戏的最高分。

数据库采用分库分表方式,4个表,在两个数据库中,DB1(Table0,Table1),DB2(Table3,Table3)。表单元为:500万(Table0存放userId在0---500万的用户数据,Table1存放userId在500w---1000w的用户数据.....

解决方案一:

定义一个hashmap,用来存放要插入到数据库中的数据。HashMap<Key,Value> hashmap;Key类的字段:userId,gameId;Value类的字段:maxScore,times;

接下来就是读取日志文件,对每行进行处理:

如果hashmap中有该gameId和userId,那么根据该行的gameScore和maxScore进行比较,来更新maxScore,同时times++;

否则:hashmap.put(key,value);

最后得到一个统计所有数据的hashmap,再把数据批量插入到数据库中。

这是基本思路,但是这样好吗?1000万行数据啊。。且不说爆不爆内存,速度也是非常慢的,也许你会说hashmap不是查找很快么,但是存在hash冲突啊。1000万行数据要冲突多少次,每个链表 有多长啊!!查找还会快么。

解决方案二:

将所有数据映射到4*10=40个文件中,4为表数,10个gameId的数量。1_1,1_2.....1_10,.......4_10;

读取日志文件String line=reader.readline();

对每行数据进行处理:String[] infos=line.split(" ");info[0]-->userId,info[1]-->gameId,info[2]-->gameScore。

userId为n,gameId为m,那么映射的文件为:n/5000000_m。这样就把数据放入到40个文件中了。

开始读取文件:进行解决方案一的处理。每个文件生成一个hashmap。再将hashmap批量插入数据库中。然后读取下一个文件,依次这么处理。。。

每个hashmap也就是平均存放25万行数据。爆不了内存,同时查找速度也不慢。经测试,到了200多万时会变得特别慢。

现在功能是完成了,但是你会发现当所有数据插入到数据库需要1个多小时,我的是每个文件2分钟多。这是一个相当漫长的等待。。。呜呜呜。。。

优化:对于mysql数据库,采用批量插入的同时设置:rewriteBatchedStatements=true。现在7秒一个文件。整个处理过程在4分钟之内就完成了。

代码就不上传。。


Python大数据实战项目是指使用Python语言进行大数据处理和分析的项目。这种项目通常涉及到使用Python的相关库和工具,如Pandas、Numpy、Matplotlib等,来处理和分析大规模的数据。在这样的项目中,可以使用Python来进行数据清洗、数据预处理、数据挖掘、机器学习和可视化等任务。 引用中提到了一个基于Python实现的整个项目分析的流程,包括数据预处理、数据可视化、数据挖掘和数据建模等步骤。这个项目还使用了自定义的LRFMP模型来进行用户画像分析,并以词云的形式展示出来。 引用中提到了十大Python经典就业练手项目,这些项目贴合企业的用人标准,可以帮助想入坑Python或者正在学习Python的人们提升就业竞争力。 引用中指出了Python的流行原因之一是它简单易学,吸引了大量程序员的关注和学习。在Python的就业方向中,大数据领域是一个重要的方向之一。Python可以用于大数据分析、数据挖掘和机器学习等任务,在这些项目中处理和分析大规模的数据。 引用中提到了一些大数据实战项目的练习目标,包括数据分析和数据挖掘、Jupyter notebook的使用、Numpy矩阵和随机数生成、Pandas的数据结构和操作、数据的可视化等。 因此,大数据实战项目是指使用Python进行大规模数据处理和分析的项目,可以涉及数据预处理、数据挖掘、机器学习和可视化等任务。这些项目可以帮助人们提升Python编程能力,并在大数据领域中找到就业机会。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值