处理海量数据是大数据工程师必备技能,通过对PB级别的数据进行挖掘与分析发掘出有价值的信息,为企业或政府做出正确决策提供依据,是十分必要的一项工作,以下是常用的海量数据处理方法!
**1. Bloom filter**
Bloom filter是一种二进制向量数据结构,具有很好的空间效率和时间效率,可用来检测一个元素是否属于一个集合。该方法的优点是它的插入和查询时间都是常数,并且它查询元素却不保存元素本身,因此,具有良好的安全性,但因其算法的原因,其正确率稍低,可以确定不存在数据一定不存在,确定存在的数据不一定存在,适合对低错误率可以容忍的场合。
**2. Hash**
Hash即散列函数,其是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数,根据处理需求的不同,有不同的Hash函数,针对字符串、整数、排列也具有相应的Hash方法,常用的Hash构造方法有直接寻址法、数字分析法、平方取中法、折叠法、随机数法以及除留余数法等。
**3. BitMap**
BitMap是使用数组来表示某些数据是否存在的方法,可对数据进行快速查找、判断和删除操作,一般来说数据范围是int的10倍以下,Bloom可以看做是对BitMap的扩展。
**4. 堆**
堆是计算机科学中的一种特殊的数据结构的统称,统称是一个可以被看做一颗树的数组对象,其原理是先从待找的n个数字中找出前k个建成小顶堆,然后依次读后面的元素并与小顶堆的堆顶进行比较,如果当前元素小或相等,则继续读后面的元素;如果当前的元素大,则用当前元素替换堆顶元素,然后调整小顶堆。最大堆求前k小,最小堆求前k大,双堆,求中位数。
**5. 双层桶**
双层桶不是一种数据结构,而是一种算法思想,类似于分治思想。因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。双层桶法一般适用于寻找第k个大的数,寻找中位数、寻找不重复或重复的数字。
**6. 数据库优化法**
海量数据都被存储在数据库中,如何从数据库中提取有用信息就需要用到数据库优化法,常见的数据库优化方法有数据分区、索引、缓存机制、分批处理、优化查询语句、使用采样数据进行数据挖掘等。
**7. 倒排索引**
倒排索引是目前搜索引擎公司对搜索引擎最常用的存储方式,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。在处理复杂的多关键字时,可在倒排表中完成查询的并、交等逻辑运算,得到结果后再对结果进行存取,这样把记录的查询转换为地址集合的运算,不必对每个记录随机存取,从而提高查找速度。
**8. 外排序**
外排序是对大文件的排序,由于内存限制,不能一下子把所有的待排内容都读到内存中进行排序,需要在内存和外部存储器之间进行多次数据交换才能达到对整个文件进行排序的目的,常用的外排序法是归并排序法,即首先生成若干个子文件,分别对这些子文件进行排序,然后对这些子文件进行多次归并,使得有序的归并段主键扩大,最后在外存上形成整个文件的单一归并段。
外排序适用于大数据的排序以及去重,但外排序的缺陷是回消耗大量的IO,效率不高。
**9. Trie树**
Trie树是一种用于快速字符串检索的多叉树结果,原理是利用字符串的公共前缀来减少空间开销。经常被搜索引擎系统用于文件词频统计。优点是:最大限度地减少无谓的字符串比较,查询效率比散列表高。适合用于数据量大,重复多,但是数据种类小可以放入内存的情况。
**10. MapReduce**
MapReduce是云计算的核心技术之一,是一种简化并行计算的分布式编程模型,主要目的是为了大型集群的系统能在大数据集上进行并行工作,并用于大规模数据的并行运算。
以上是处理海量数据常用的方法,可以根据需处理的数据特点进行选择使用!
有疑问加站长微信联系(非本文作者)