大数据处理问题及解决方法

大数据,就是指种类多、流量大、容量大、价值高、处理和分析速度快的真实数据汇聚的产物。

通常会需要考虑存储空间是、效率等问题。解决大数据问题一般主要的思想:

1.文件切分,(将大文件切成若干个小文件进行处理),

2.哈希切分,

3.使用位图。

以下通过几个实例来进行进一步分析:

1、海量日志数据,提取出某日访问百度次数最多的那个IP。(或者:给一个超过100G的文件,文件中存放着iP地址,请找出其中出现次数最多的IP地址)

思考:这两个题是同一个题。IP的数目还是有限的,最多有个2^32(42亿)个IP,注意到IP是32位的。

1byte = 8位

1 KB = 1024 bytes (字节)

1MB = 1024 KB

1 GB = 1024 MB

假设每个IP只出现一次,所需内存大概为(32*2^32)位,约为16个G左右。如果内存足够大,就直接进行统计。但是如果内存没有那么大,)我们可以将大文件切分成若干个小文件(假如为100个小文件),采用映射的方法,比如用IP地址模1000,这样同一个IP地址肯定会出现在同一个小文件中,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。

2.给定100亿个整数,设计算法找到只出现一次的整数。

思考:如果是有符号整数的话,范围为-2147483648~2147483647无符号整数为0~4294967296 ,有符号的使用两个bitset,一个存放正数,一个负数。 每个数使用两个位来判断其出现几次。00表示出现0次,01出现1次,10出现大于一次。

比如说存放整数100,就将bitset的第100*2位设置为+1,当所有数放完之后,对每两位进行测试看其值为多少?若是第i为与i+1为的值为01,则这个整数:i*2,在集合中只出现了1次。需要总共用bitnun=(2^31*2)个位表示,需空间为int[bitnum],即512M.

3.给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

方案1:40亿个整数差不多相当于全部整数,需要总共用(2^32)个位表示,需空间为int[bitnum],即512M.申请512M的内存,一个bit位代表一个unsigned int值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。

方案2:因为2^32为40亿多,所以给定一个数可能在,也可能不在其中;这里我们把40亿个数中的每一个用32位的二进制来表示假设这40亿个数开始放在一个文件中。

然后将这40亿个数分成两类: 1.最高位为0 2.最高位为1 并将这两类分别写入到两个文件中,其中一个文件中数的个数<=20亿,而另一个>=20亿(这相当于折了);与要查找的数的最高位比较并接着进入相应的文件再查找,再然后把这个文件为又分成两类: 1.次最高位为0 2.次最高位为1。并将这两类分别写入到两个文件中,其中一个文件中数的个数<=10亿,而另一个>=10亿(这相当于折半了); 与要查找的数的次最高位比较并接着进入相应的文件再查找。

....... 以此类推,就可以找到了,而且时间复杂度为O(logn)。

方案3:位图方法,使用位图法判断整形数组是否存在重复 判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。( 位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1,如遇到5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。它的运算次数最坏的情况为2N。如果已知数组的最大值即能事先给新数组定长的话效率还能提高一倍。)

本文作者:佚名

来源:51CTO

时间: 2024-09-23 17:18:12

大数据处理问题及解决方法的相关文章

kmplayer看电影背景声大说话声小的解决方法

kmplayer看电影背景声大说话声小的解决方法   KMPLayer KMPLayer播放电影背景声大但是说话声小问题分析: 1. 解决方法:"参数选项 其他"→"参数选项"→"音频处理"→"重采样 输出"→"输出方式",然后在右侧窗口的右下部分将默认:输入(原始)等于输出(推荐))修改为"2/0立体声". 将输出方式修改为"2/0 立体声" 设置完毕后,当你再次播

Android SQLite操作之大数据处理与同时读写方法_Android

本文实例讲述了Android SQLite操作之大数据处理与同时读写方法.分享给大家供大家参考,具体如下: 1. 批量写入 采用事物方式,先缓存数据,再批量写入数据,极大提高了速度 288条,直接inset into 耗时7秒 8640条,   批量写入 耗时5-7秒 try { this.myDataBase.beginTransaction(); // 手动设置开始事务 for (int i = 0; i < objArr.length; i++) { this.myDataBase.exe

Android SQLite操作之大数据处理与同时读写方法

本文实例讲述了Android SQLite操作之大数据处理与同时读写方法.分享给大家供大家参考,具体如下: 1. 批量写入 采用事物方式,先缓存数据,再批量写入数据,极大提高了速度 288条,直接inset into 耗时7秒 8640条,   批量写入 耗时5-7秒 try { this.myDataBase.beginTransaction(); // 手动设置开始事务 for (int i = 0; i < objArr.length; i++) { this.myDataBase.exe

九大内存常见问题和解决方法

相信众多朋友在使用电脑时,总会遇到这样或那样的各种问题.如启动电脑却无法正常启动.无法进入操作系统或是运行应用软件,无故经常死机等故障时,这些问题的产生常会因为内存出现异常故障而导致操作失败.这是因为内存做为电脑中三大件配件之一,主要担负着数据的临时存取任务.而市场上内存条的质量又参差不齐,所以它发生故障的机率比较大.现为解决这些内存常见问题,作为国内一线内存品牌的金泰克给您支招,希望可以对流您有所帮助. 内存出现问题一部分是因为升级内存,但由于内存种类的不匹配,往往会遇到一些麻烦,具体出现的内

cpu风扇噪音太大的原因及解决方法

有的时候,我们打开大型游戏或者开启很多程序的时候,都会听到机箱中'嗡嗡'的声音,不要奇怪,这是CPU风扇在工作了. CPU温度升高的时候,系统会动态获得CPU的温度,当温度过高的时候,风扇便会自动加快转动,进行散热,而平常则保持较低转速,这样不仅省电,而且对风扇寿命也有好处. 一般来说,风扇转速在3000 RPM-4000RPM应该说很正常,当转速达到6000左右的时候,就会明显出现噪音了. 轴心和扇叶是噪音最大来源 优质的风扇,其扇叶的重心在轴心上,运转时非常平稳,噪音很小,而劣质的风扇,往往

探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法_php技巧

[造成原因]:Because PHP's integer type is signed, and many IP addresses will result in negative integers.[解决办法]:其官方手册中提到,可以"you need to use the "%u" formatter of sprintf() or printf() to get the string representation of the unsigned IP address&q

php 无法上传大文件问题完美解决方法

1.打开php.ini(打开方式就不用说了,百度一大堆) 2.查找post_max_size 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的 默认为8M,设置为自己需要的值,此参数建议要设置比upload_max_filesize大一些 3.查找File Uploads 是否允许通过http上传文件的开关,确认file_uploads = on 4.查找upload_tmp_dir 文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹

Win10风扇转动声音大且响的解决方法

更改系统散热方式的步骤: • 打开控制面板-找到电源选项,在选择的电源计划后面点击"更改计划设置"; • 点击"更改高级电源设置"; • 在这里将系统散热方式更改为"被动",确定即可.

宽带连接错误解决方法大集合

上网最烦的是什么?网速慢,广告,中病毒等等,其中最让人感到烦恼的莫过于那些莫名其妙弹出的"宽带连接错误XXX"的弹窗警告了,经常在这种时候你是上不了网的,身边有手机还好,刷着流量去百度找帖子解决,身边没手机怎么办?打电信或者联通客服?有一点必须确认的是他们即使答应让人来修复也一定不是现在. 今天软媒小编整理编排了一些关于691.623.678...宽带连接错误解决方法大集合,这些解决方法来源于网络,望知晓出处者不吝告知,感激不尽.希望或多或少能帮助到你. 宽带连接错误691(由于域上的