精华内容
下载资源
问答
  • Excel 数据分析与处理 CONTENTS 目录 6.1 简单排序 6.2 以当前选中的区域排序 6.3 多关键字排序 6.4 自定义排序 6.5 特殊排序 6.5 特殊排序 选中数据区域中的任意一个黄色背景的单元格如B2单击鼠标右键在弹出的快捷...
  • 海量数据处理技巧

    万次阅读 2018-08-02 20:07:18
    数据时代来临,数据量的爆炸式增长是最为显著的特征。当高性能硬件的普及还跟不上这样的数据大潮时,如何在有限的时空资源...需要明确的一点是,现实情况复杂多变,所以对于海量数据处理这样大的主题,是不可能用一...

    数据时代来临,数据量的爆炸式增长是最为显著的特征。当高性能硬件的普及还跟不上这样的数据大潮时,如何在有限的时空资源内处理海量数据成为了计算机科学以及数理统计等领域最大的挑战。

    所谓“数据处理”,在本文中特指通过计算机技术,对海量数据进行存储、统计、查询等操作。我将在下面介绍一些基本的海量数据处理的方法,供大家参考。需要明确的一点是,现实情况复杂多变,所以对于海量数据处理这样大的主题,是不可能用一篇博客就说清楚的。但方法论可以一通百通,我们通过一些已经被无数次实验证明有效的方法,就能大致理解对此类问题的解决思路,之后在面临新的问题时,至少能找到一个大致的方向。

    1. 海量数据处理的困难

    海量数据处理的困难用一句话概括,就是时空资源不够。具体来说,

    • 时间受限:无法在有限时间内,完成针对海量数据的某项处理工作;
    • 空间受限:无法将海量数据一次性读入内存

    对于时间受限的问题,我们一般的解决办法是高效的算法配合恰当的数据结构,比如哈希表,Bloom Filter,堆,倒排索引,tire树);而对于空间受限的问题,一般的解决办法是“大而化小,分而治之”的策略,既然一次性行不通,那就一部分一部分读,每读入一部分可以生成一个小文件,小文件是可以直接读入内存的,我们这样分割大数据之后,再依次处理小文件的数据。

    注意,本文我只介绍对于海量数据执行一些简单的数据处理(比如存储,查重,排序,统计数量等)时的一些通用的方法,至于更复杂的计算,涉及具体算法性能层面的东西,由于世界上算法以千万记,面对不同情况,又有着无数变形,所以不可能总结出来。

    2. 海量数据处理方法归纳

    July的博客 教你如何迅速秒杀掉:99%的海量数据处理面试题 对海量数据处理的方法进行了细致的总结,这篇文章写的非常全面,建议大家一读。但我读完之后,窃以为许多问题和解决思路有所重复,没必要全部都详细探究。为了理清思路、抓重点,我将那篇文章中涉及的问题以及相应方法更加简化地总结为如下7点。

    2.1 哈希映射 + 统计 + 排序

    解决问题:海量数据不能一次性读入内存,而我们需要对海量数据进行的计数、排序等操作
    使用工具:hash函数(hash表);堆

    这种方法是典型的“分而治之”的策略,也是解决空间限制最常用的方法。基本思路可以用下图表示。先借助哈希算法,计算每一条数据的hash值,按照hash值将海量数据分布存储到多个桶中(所谓桶,一般可以用小文件实现)。根据hash函数的唯一性,相同的数据一定在同一个桶中。如此,我们再依次处理这些小文件,最后做合并运算即可(有点类似于Map-Reduce的思想)。


    注:一般用hash函数将数据映射到桶的方法是:

    bucketID=H(mi)  %  n(35) (35) b u c k e t I D = H ( m i )     %     n

    其中 mi m i 为第 i i 条数据,bucket_ID为桶标号,n为要设置的桶数量。关于桶数量(即小文件数量)设置的基本的原则是:每个小文件的大小比内存限制要小。比如处理1G的大文件,内存限制为1M,那就可以把大文件分成2000个小文件(甚至更多),这样每个小文件的大小约500K(甚至更小),我们就可以轻松读入内存处理了。下面看一些具体的例子:

    问题1 top-k筛选:海量数据存储于多个文件,任何一条数据都可能存在于任何一个文件当中,现需要筛选出现的次数最多的k条数据。
    解决思路

    • 依次遍历这些文件,通过hash映射,将每个文件的每条数据映射到新构造的多个小文件中(设生成了 n n 个小文件);
    • 依次统计每个小文件中出现次数最多的k条数据,构成hash表,hash表中每个键值对的形式为 dataItem: count
    • 利用堆排序,依次遍历这些hash表,在 nk n ∗ k 条数据中,找出count值最大的 k k 个;

    这里之所以使用堆排序,也是为了能尽可能地提高排序效率。就上例而言,堆排序的时间复杂度为nklog(k)

    问题2 对比查重:现有A和B两个大文件,每个文件都存储着海量数据,要求给出A,B中重复的数据。
    解决思路

    • 遍历A中的所有数据,通过hash映射将他们分布存储在 n n 个小文件中,记为{a1,a2,,an}
    • 遍历B中的所有数据,通过hash映射将他们分布存储在 n n 个小文件中,记为{b1,b2,,bn}
    • 根据hash函数性质可知,A和B中的相同数据一定被映射到序号相同的小文件,所以我们依次比较 {ai,bi} { a i , b i } 即可;
    • 如果问题更进一步,要求返回重复次数最多的 k k 条数据,则可以将对比小文件找到的数据存入hash表,键为数据,值为该数据出现的次数。再用大小为k的堆,排序找出即可。

    2.2 Trie树处理海量字符串数据

    解决问题:当需要处理的是海量字符串数据时,有时Trie树会比直接上面说的hash映射的策略更高效。
    使用工具:Trie树;堆

    Trie树是一种非常强大的处理海量字符串数据的工具。尤其是大量的字符串数据中存在前缀时,Trie树特别好用。Trie树在字典的存储,字符串的查找,求取海量字符串的公共前缀,以及字符串统计等方面发挥着重要的作用。用于存储时,Trie树因为不重复存储公共前缀,节省了大量的存储空间;用于以字符串的查找时,Trie树依靠其特殊的性质,实现了在任意数据量的字符串集合中都能以 O(len) O ( l e n ) 的时间复杂度完成查找( len l e n 为要检索的字符串长度);在字符串统计中,Trie树能够快速记录每个字符串出现的次数。下面看几个问题实例。

    注:有关Trie树的详细讲解可以参考我之前的博客 Trie树的构建和应用

    问题3 数据去重:一个超大文件(不能直接读入内存),里面包含海量字符串数据,但字符串数据种类有限(可见含有大量重复),现需要对字符串去重。并统计去重后每个字符串出现的次数
    解决思路

    • 将大文件分割成多个小文件,依次遍历每个小文件,读取其中存储的每一个字符串,构建Trie树,并在每一个终止节点记录该节点代表的字符串(即从根节点到该节点的字符组成的字符串)当前出现的次数,解决问题的时间复杂度为 O(Nlen) O ( N ∗ l e n ) ,其中 N N 为字符串总数,len为字符串的平均长度;

    • 如果问题更进一步,需要排序,那就再建一个堆,读取Trie树,将字符串依次插入堆,时间复杂度为 O(NlenlogN) O ( N ′ ∗ l e n ∗ log ⁡ N ′ ) ,其中 N N ′ 是去重后字符串的数量;

    至于Trie树在存储,求取公共前缀等方面的应用可以参考我上面给出的博客,这里不再赘述。

    总结一下,Trie树对于海量字符串数据,在数据种类有限(构建的Trie树可以完全读入内存)时,能够使我们轻松的进行存储,查找,计数等工作。

    2.3 Bloom Filter

    解决问题:数据字典的构建;判定目标数据是否存在于一个海量数据集;集合求交
    使用工具:Bloom Filter;hash函数

    以存在性判定为例,Bloom Filter通过对目标数据的映射,能够以 O(k) O ( k ) 的时间复杂度判定目标数据的存在性,其中 k k 为使用的hash函数个数。这样就能大大缩减遍历查找所需的时间。

    注:有关Bloom Filter树的详细讲解可以参考我之前的博客 Bloom Filter原理与实现,下面我假设你已经知道了Bloom Filter的工作原理。直接看问题4:

    问题4 集合求交:与上面的问题2类似,只不过现在不是A和B两个大文件,而是A, B, C, D….多个大文件。
    解决思路

    • 依次遍历每个大文件中的每条数据,遍历每条数据时,都将它插入Bloom Filter;
    • 如果已经存在,则在另外的集合(记为S)中记录下来;

    • 如果不存在,则插入Bloom Filter;
    • 最后,得到的 S S 即为所有这些大文件中元素的交

    问题5 unsigned int型整数存在性判定:判定一个unsigned int型整数是否在一个大的unsigned int型整数数据集中。
    解决思路

    • 假设unsigned int型整数数据集长度为N,则申请一个大小为512M的数组作为Bloom Filter;
    • 遍历数据集,按照遍历到的整数(记为 a a )将Bloom Filter的第a位变成1;
    • 检查Bloom Filter中,目标数据所代表的位是0还是1;

    问题5用的其实是一种简化了的Bloom Filter,不再采取hash映射的方式,而是直接根据整数的大小确定要改变的位数,这在某些特殊情况下(比如数据种类不多时)非常有效。

    2.4 多层桶结构

    解决问题:海量数据求取第 k k 大数
    使用工具:hash函数

    多层桶结构其实和最开始我们用hash映射分割大文件的思路是一致的,都是一种“分而治之”的策略。只不过多层桶结构是对有些桶分割之后再分割,构成了一种层次化的结构,它主要应用于一次分割的结果依然不能解决内存限制的情况。比如下面的问题6:

    问题6 求取海量整数的中位数。
    解决思路

    • 依次遍历整数,按照其大小将他们分拣到n个桶中。但是现在出现了一种不好的情况,就是可能有的桶数据量很小,有的则数据量很大,大到内存放不下了;

      • 对于那些太大的桶,我们就再分割成更小的桶,当然分割的准则还是依据数据大小,这样,其实是构成了一种类似于不平衡的多叉树的结构;
      • 根据多叉树第一层的数量统计结果,我们可以知道中位数在哪个节点中,如果该节点还有孩子,就判断在其哪个孩子节点中,直到找到叶子节点,最后找出目标。
      • 2.5 倒排索引

        这个不详细说了,在文档数据的检索,尤其是关键字查询领域有着极为广泛的应用。其实这个思路也可以推广开来,当存在海量的文件,且每个文件包含的数据种类有限,而我们的任务又是依据数据查文件时,倒排索引都可以排上用场。

        2.6 外排序

        解决问题:海量数据的排序
        实用工具:归并算法

        外排序是经典的排序方法之一,主要是针对大数据不能直接读入内存的情况,通过内存与外存之间的数据交换,实现海量数据排序的。我大致介绍一下外排序的算法思路,详细的解释可以参照博客:排序之外部排序

        问题7 海量数据排序。
        解决思路

        • 依次读取数据,将数据按照大小范围,生成一定数量的“归并段”并写入外存,注意归并段中的数据是排好序的;
        • 对归并段执行归并排序,每两个归并段排序之后的结果作为新的归并段写入外存;
        • 重复执行上一步,知道完全排序完毕,最终的排序结果会存在外存中;

        2.7 MapReduce

        MapReduce是一种计算模型,分为”Map”和”Reduce”两个阶段。

        • Map:将大量数据分割后(或者将困难任务分解后)“各个击破”;
        • Reduce:将“各个击破”的结果按照一定的规律进行合并操作;

        这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,从而突破时间或者空间的限制。时间上显然更快,空间上,单个机器只需要处理空间允许的数据量即可。举个简单的例子就是归并排序,我们先将数据集分割成小数据集,使用多个机器排序每个分割后的小数据集(Map),再将处理好的归并段依次归并(Reduce)。

        本文求尽量全面总结海量数据处理的思路,不求对每种思路的深入探讨。因为这些方法要么在我之前的博客中已有详细说明,要么比较通用,网上的介绍很充分。

        不得不说海量数据处理时,面临的问题是千变万化的,所以本文也会持续更新,希望读者们也能不断补充我遗漏的知识。

    展开全文
  • Python进行Excel操作-格式处理数据排序前言实现1 格式处理2 数据排序3 结果4 代码 前言 紧接上一篇博客[1]。需求:进一步对整理后的数据进行排序,并且输出格式化的表格。 实现 1 格式处理 excel表格的格式处理...

    Python进行Excel操作-格式处理和数据排序

    前言

    紧接上一篇博客[1]。需求:进一步对整理后的数据进行排序,并且输出格式化的表格。

    实现

    1 格式处理

    excel表格的格式处理参考[2],实现单元格字体设置、边框设置、颜色填充,以及整体列宽的设置。

    2 数据排序

    想要进行数据排序,由于上一篇博客使用的是字典类型,而字典类型一般无法进行数据的排序处理。在此需要对把相应的内容放到表格或者元组中,使用sorted函数实现排序操作。对于排序需要注意的是,要分清主次,比如主要按某一条目进行排序,需要考虑其他条目在当前排序约束下的排序结果。

    结果

    (1)按“累计合同总价”排序
    在这里插入图片描述
    (2) 按“推荐数量”排序
    第二列排序
    两个排序结果是一样的,有点巧合,大家可以使用更多的数据进行验证。

    代码

    # By WDL 2020-4-7
    from openpyxl import Workbook, load_workbook
    from openpyxl.styles import Alignment
    from openpyxl.styles import PatternFill, colors, Color
    from openpyxl.styles import NamedStyle, Font, Border, Side
    
    wb= load_workbook("XXX公司推荐成交明细.xlsx")
    ws=wb["Sheet1"]#也可以使用wb.get_sheet_by_name("Sheet1") 获取工作表
    # 读取数据,把excel中的一个table按行读取出来,存入一个二维的list
    total_list=[]
    for row in ws.rows:
        row_list=[]
        for cell in row:
            row_list.append(cell.value)
        total_list.append(row_list)
    
    namedict={}
    valuedict={}
    for term in total_list:
        if term[1] == None or len(term[1]) > 3:# 员工姓名列
            continue
        else:
            namedict[term[1]]=namedict.get(term[1],0)+1
            valuedict.setdefault(term[1],[]).append(term[-1]) #一键 对多值的字典
    #排序前的数据处理操作
    moneydict={} #金额汇总后的字典
    for name in namedict:
        moneydict[name]=round(sum(valuedict[name])/(10000.0),2) #单位为万,保留两位小数
    #最后的数据使用二维数组表示 ["姓名",数量,金额]
    result=[]
    for name in namedict:
        term=[name,namedict[name],moneydict[name]]
        result.append(term)
    #print(result[0][1])
    
    # 格式设置居中 字体 边框设置
    alignmentCenter = Alignment(horizontal='center', vertical='center')
    fontYahei12 = Font(name=u'微软雅黑', bold=False, size=12)
    fontYahei14 = Font(name=u'微软雅黑', bold=True, size=14) #字体
    thinSide = Side(style='thin', color=colors.BLACK)
    allBlackThinBorder = Border(left=thinSide, top=thinSide, right=thinSide, bottom=thinSide) #边框
    commonBkgColorHex = "AACF91" #aRGB Hex value
    commonFill = PatternFill(start_color=commonBkgColorHex, end_color=commonBkgColorHex, fill_type="solid") #颜色填充
    
    # 保存写操作
    newwb = Workbook()
    newsheet=newwb.active #第一个表格
    #表头
    newsheet.title="Sheet1"
    newsheet.column_dimensions["A"].width=15 #列宽设置
    newsheet.column_dimensions["B"].width=15
    newsheet.column_dimensions["C"].width=20
    newsheet["A1"]="汇总表(按累计合同总价排序)"#total_list[0][0]
    newsheet.merge_cells("A1:C1")
    newsheet.append(["推荐人姓名","推荐数量","累计合同总价(万)"]) #追加一行
    #排序操作
    xterm=sorted(result,key=lambda x:x[1],reverse=True) # 按列表的第二个元素排序
    xnumber=sorted(xterm,key=lambda x:x[2],reverse=True) # 按列表的第三个元素排序
    for ls in xnumber:
        newsheet.append(ls)#表格中写入行
    i=1
    #对每个单元格进行格式设置
    for eachCommonRow in newsheet.iter_rows(min_row=1,min_col=1,max_row=7,max_col=3):#
        for eachCellInCol in eachCommonRow:
            if i==1:
                eachCellInCol.font = fontYahei14  # 字体设置
                eachCellInCol.fill = commonFill #颜色填充
            elif i==2:
                eachCellInCol.font = Font(name=u'微软雅黑', bold=True, size=12)  # 字体设置
                eachCellInCol.fill = commonFill
            else:
                eachCellInCol.font = fontYahei12  # 字体设置
            eachCellInCol.alignment = alignmentCenter #居中
            eachCellInCol.border=allBlackThinBorder #边框设置
        i=i+1
    
    ######
    #第二个表格
    sheet2=newwb.create_sheet(title="Sheet2", index=1)
    #表头
    sheet2.column_dimensions["A"].width=15 #列宽设置
    sheet2.column_dimensions["B"].width=15
    sheet2.column_dimensions["C"].width=20
    
    sheet2["A1"]="汇总表(按推荐数量排序)"#total_list[0][0]
    sheet2.merge_cells("A1:C1")
    sheet2["A2"]="推荐人姓名"
    sheet2["B2"]="推荐数量"
    sheet2["C2"]="累计合同总价(万)"
    yterm=sorted(result,key=lambda x:x[2],reverse=True) # 按列表的第3个元素排序
    ymoney=sorted(yterm,key=lambda x:x[1],reverse=True) # 按列表的第二个元素排序
    for ls in ymoney:
        sheet2.append(ls)
    i=1
    #对每个单元格进行格式设置
    for eachCommonRow in sheet2.iter_rows(min_row=1,min_col=1,max_row=7,max_col=3):#
        for eachCellInCol in eachCommonRow:
            if i==1:
                eachCellInCol.font = fontYahei14  # 字体设置
                eachCellInCol.fill=commonFill
            elif i==2:
                eachCellInCol.font = Font(name=u'微软雅黑', bold=True, size=12)  # 字体设置
                eachCellInCol.fill = commonFill
            else:
                eachCellInCol.font = fontYahei12  # 字体设置
            eachCellInCol.alignment = alignmentCenter #居中
            eachCellInCol.border=allBlackThinBorder #边框设置
        i=i+1
    newwb.save("XXX公司推荐成交明细_final.xlsx")
    

    注意以上代码,格式处理部分参考文献[2],对于自动列宽和行高的处理,目前还没找到办法。

    参考文献:
    [1] Python进行Excel数据处理. https://blog.csdn.net/wdl1992/article/details/105294976
    [2] 用openpyxl去新建excel文件并保存数据和设置单元格样式. https://www.crifan.com/openpyxl_create_excel_file_then_save_data_set_table_cell_style/

    展开全文
  • 海量数据处理的方法总结

    万次阅读 多人点赞 2021-02-24 02:56:17
    所谓海量数据处理,就是指数据量太大,无法在较短时间内迅速解决,或者无法一次性装入内存。而解决方案就是:针对时间,可以采用巧妙的算法搭配合适的数据结构,如 Bloom filter/Hashmap/bit-map/堆/数据库/倒排索引...

    基础知识:

    • bit:位
    • byte:字节
    • 1 byte= 8 bit 
    • int 类型为 4 byte,共32位bit,unsigned int也是
    • 2^32 byte = 4G 
    • 1G= 2^30 =10.7亿 

    海量数据处理概述:

    所谓海量数据处理,就是指数据量太大,无法在较短时间内迅速解决,或者无法一次性装入内存。而解决方案就是:针对时间,可以采用巧妙的算法搭配合适的数据结构,如 Bloom filter/Hashmap/bit-map/堆/数据库/倒排索引/trie树;针对空间,大而化小,分而治之(hash映射),把规模大化为规模小的,各个击破。所以,海量数据处理的基本方法总结起来分为以下几种:

    • 分而治之/hash映射 + hash统计 + 堆/快速/归并排序;
    • Trie树/Bloom filter/Bitmap
    • 数据库/倒排索引;
    • 双层桶划分;
    • 外排序;
    • 分布式处理之Hadoop/Mapreduce。

    一、分而治之/hash映射 + hashmap统计 + 快速/归并/堆排序

    这种方法是典型的“分而治之”的策略,是解决空间限制最常用的方法,即海量数据不能一次性读入内存,而我们需要对海量数据进行的计数、排序等操作。基本思路如下图所示:先借助哈希算法,计算每一条数据的 hash 值,按照 hash 值将海量数据分布存储到多个桶中。根据 hash 函数的唯一性,相同的数据一定在同一个桶中。如此,我们再依次处理这些小文件,最后做合并运算即可。

    问题1:海量日志数据,统计出某日访问百度次数最多的那个IP

    解决方式:IP地址最多有 2^32 = 4G 种取值情况,所以不能完全加载到内存中进行处理,采用 hash分解+ 分而治之 + 归并 方式:

    • (1)按照 IP 地址的 Hash(IP)%1024 值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址; 
    • (2)对于每一个小文件,构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址
    • (3)然后再在这1024组最大的IP中,找出那个频率最大的IP

    问题2:有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

    解决思想: hash分解+ 分而治之 + 归并

    • (1)顺序读文件中,对于每个词x,按照 hash(x)/(1024*4) 存到4096个小文件中。这样每个文件大概是250k左右。如果其中的有的文件超过了1M大小,还可以按照hash继续往下分,直到分解得到的小文件的大小都不超过1M。
    • (2)对每个小文件,可以采用 trie树/hashmap 统计每个文件中出现的词以及相应的频率,并使用 100个节点的小顶堆取出出现频率最大的100个词,并把100个词及相应的频率存入文件。这样又得到了4096个文件。
    • (3)下一步就是把这4096个文件进行归并的过程了

    问题3:有a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

    解决方案1:如果内存中想要存入所有的 url,共需要 50亿 * 64= 320G大小空间,所以采用 hash 分解+ 分而治之 + 归并 的方式:

    • (1)遍历文件a,对每个 url 根据某种hash规则,求取hash(url)/1024,然后根据所取得的值将 url 分别存储到1024个小文件(a0~a1023)中。这样每个小文件的大约为300M。如果hash结果很集中使得某个文件ai过大,可以在对ai进行二级hash(ai0~ai1024),这样 url 就被hash到 1024 个不同级别的文件中。
    • (2)分别比较文件,a0 VS b0,…… ,a1023 VS b1023,求每对小文件中相同的url时:把其中一个小文件的 url 存储到 hashmap 中,然后遍历另一个小文件的每个url,看其是否在刚才构建的 hashmap 中,如果是,那么就是共同的url,存到文件中。
    • (3)把1024个文件中的相同 url 合并起来

    解决方案2:Bloom filter

    如果允许有一定的错误率,可以使用 Bloom filter,4G内存大概可以表示 340 亿bit,n = 50亿,如果按照出错率0.01算需要的大概是650亿个bit,现在可用的是340亿,相差并不多,这样可能会使出错率上升些,将其中一个文件中的 url 使用 Bloom filter 映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)

    问题4:有10个文件,每个文件1G,每个文件的每一行存放的都是用户的 query,每个文件的query都可能重复。要求你按照query的频度排序。

    解决方案1:hash分解+ 分而治之 +归并

    • (1)顺序读取10个文件 a0~a9,按照 hash(query)%10 的结果将 query 写入到另外10个文件(记为 b0~b9)中,这样新生成的文件每个的大小大约也1G
    • (2)找一台内存2G左右的机器,依次使用 hashmap(query, query_count) 来统计每个 query 出现的次数。利用 快速/堆/归并排序 按照出现次数进行排序。将排序好的query和对应的query_cout输出到文件中。这样得到了10个排好序的文件c0~c9。
    • (3)对这10个文件 c0~c9 进行归并排序(内排序与外排序相结合)。每次取 c0~c9 文件的 m 个数据放到内存中,进行 10m 个数据的归并,即使把归并好的数据存到  d结果文件中。如果 ci 对应的m个数据全归并完了,再从 ci 余下的数据中取m个数据重新加载到内存中。直到所有ci文件的所有数据全部归并完成。

    解决方案2:Trie树

    如果query的总量是有限的,只是重复的次数比较多而已,可能对于所有的query,一次性就可以加入到内存了。在这种情况下,可以采用 trie树/hashmap 等直接来统计每个query出现的次数,然后按出现次数做快速/堆/归并排序就可以了。

    问题5:海量数据分布在100台电脑中,请高效统计出这批数据的TOP10

    解决思想: 分而治之 + 归并

    • (1)在每台电脑上求出TOP10,采用包含10个元素的堆完成(TOP10小,用最大堆,TOP10大,用最小堆)
    • (2)求出每台电脑上的TOP10后,把这100台电脑上的 TOP10 合并之后,共1000个数据,在采用堆排序或者快排方式 求出 top10

    (注意:该题的 TOP10 是取最大值或最小值,如果取频率TOP10,就应该先hash分解,将相同的数据移动到同一台电脑中,再使用hashmap分别统计出现的频率)

    问题6:在 2.5 亿个整数中找出不重复的整数,内存不足以容纳这2.5亿个整数

    解决方案1:hash 分解+ 分而治之 + 归并

    • (1)2.5亿个 int 类型 hash 到1024个小文件中 a0~a1023,如果某个小文件大小还大于内存,进行多级hash
    • (2)将每个小文件读进内存,找出只出现一次的数据,输出到b0~b1023
    • (3)最后数据合并即可

    解决方案2 : 2-Bitmap

    如果内存够1GB的话,采用 2-Bitmap 进行统计,共需内存 2^32 * 2bit = 1GB内存。2-bitmap 中,每个数分配 2bit(00表示不存在,01表示出现一次,10表示多次,11无意义),然后扫描这 2.5 亿个整数,查看Bitmap中相对应位,如果是00,则将其置为01;如果是01,将其置为10;如果是10,则保持不变。所描完成后,查看bitmap,把对应位是01的整数输出即可。(如果是找出重复的数据,可以用1-bitmap。第一次bit位由0变1,第二次查询到相应bit位为1说明是重复数据,输出即可)

    二、Trie树+红黑树+hashmap

    Trie树、红黑树 和 hashmap 可以认为是第一部分中分而治之算法的具体实现方法之一。

    其中,Trie树适合处理海量字符串数据,尤其是大量的字符串数据中存在前缀时。Trie树在字典的存储,字符串的查找,求取海量字符串的公共前缀,以及字符串统计等方面发挥着重要的作用。

    • 用于存储时,Trie树因为不重复存储公共前缀,节省了大量的存储空间;
    • 用于以字符串的查找时,Trie树依靠其特殊的性质,实现了在任意数据量的字符串集合中都能以O(len)的时间复杂度完成查找(len为要检索的字符串长度);
    • 在字符串统计中,Trie树能够快速记录每个字符串出现的次数

    问题1:上千万或上亿数据(有重复),统计其中出现次数最多的前N个数据。

    解决方案: hashmap/红黑树 + 堆排序

    • (1)如果是上千万或上亿的 int 数据,现在的机器4G内存能存下。所以考虑采用 hashmap/搜索二叉树/红黑树 等来进行统计重复次数
    • (2)然后使用包含 N 个元素的小顶堆找出频率最大的N个数据

    问题2:一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,并给出时间复杂度

    解决思路: trie树 + 堆排序

    • 用 trie树 统计每个词出现的次数,时间复杂度是O(n*len)(len表示单词的平均长度)。
    • 然后使用小顶堆找出出现最频繁的前10个词,时间复杂度是O(n*lg10)。

    总的时间复杂度,是O(n*le)与O(n*lg10)中较大的那一个。

    问题3:有一千万个字符串记录(这些字符串的重复率比较高,虽然总数是1千万,但是如果去除重复和,不超过3百万个),每个查询串的长度为1-255字节。请你统计最热门的10个查询串(重复度越高,说明越热门),要求使用的内存不能超过1G。

    解决方案:

    内存不能超过 1G,每条记录是 255byte,1000W 条记录需要要占据2.375G内存,这个条件就不满足要求了,但是去重后只有 300W 条记录,最多占用0.75G内存,因此可以将它们都存进内存中去。使用 trie树(或者使用hashmap),关键字域存该查询串出现的次数。最后用10个元素的最小堆来对出现频率进行排序。总的时间复杂度,是O(n*le)与O(n*lg10)中较大的那一个。

    问题4:1000万字符串,其中有些是重复的,需要把重复的全部去掉,保留没有重复的字符串。

    解决方案:trie树

    三、BitMap 与 Bloom Filter

    1、BitMap 就是通过 bit 位为 1 或 0 来标识某个状态存不存在。可用于数据的快速查找,判重,删除,一般来说适合的处理数据范围小于 8bit *2^32。否则内存超过4G,内存资源消耗有点多。

    2、Bloom Filter 主要是用于判定目标数据是否存在于一个海量数据集 以及 集合求交集。以存在性判定为例,Bloom Filter 通过对目标数据的映射,能够以 O(k) 的时间复杂度判定目标数据的存在性,其中k为使用的hash函数个数。这样就能大大缩减遍历查找所需的时间。

    问题1:已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

    解决思路

    8位最多99 999 999,需要 100M个bit 位,不到12M的内存空间。我们把 0-99 999 999的每个数字映射到一个Bit位上,这样,就用了小小的12M左右的内存表示了所有的8位数的电话

    问题2:2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

    解决方案:使用 2-bitmap,详情见上文

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

    解决方案:使用 Bitmap,申请 512M 的内存,一个bit位代表一个 unsigned int 值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。

    问题4:现有两个各有20亿行的文件,每一行都只有一个数字,求这两个文件的交集。 

    解决方案:采用 bitmap 进行问题解决,因为 int 的最大数是 2^32 = 4G,用一个二进制的下标来表示一个 int 值,大概需要4G个bit位,即约4G/8 = 512M的内存,就可以解决问题了。

    • ① 首先遍历文件,将每个文件按照数字的正数,负数标记到2个 bitmap 上,为:正数 bitmapA_positive,负数 bitmapA_negative
    • ② 遍历另为一个文件,生成正数:bitmapB_positive,bitmapB_negative
    • ③ 取 bitmapA_positive and bitmapB_positive 得到2个文件的正数的交集,同理得到负数的交集。
    • ④ 合并,问题解决

    这里一次只能解决全正数,或全负数,所以要分两次

    问题5:与上面的问题4类似,只不过现在不是A和B两个大文件,而是A, B, C, D….多个大文件,求集合的交集

    解决方案:

    • (1)依次遍历每个大文件中的每条数据,遍历每条数据时,都将它插入 Bloom Filter;
    • (2)如果已经存在,则在另外的集合(记为S)中记录下来;
    • (3)如果不存在,则插入Bloom Filter;
    • (4)最后,得到的S即为所有这些大文件中元素的交集

    四、多层划分:

    多层划分本质上还是分而治之的思想,重在“分”的技巧上!因为元素范围很大,需要通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。适用用于:第k大,中位数,不重复或重复的数字

    问题1:求取海量整数的中位数

    解决方案:

    依次遍历整数,按照其大小将他们分拣到n个桶中。如果有的桶数据量很小,有的则数据量很大,大到内存放不下了;对于那些太大的桶,再分割成更小的桶;

    之后根据桶数量的统计结果就可以判断中位数落到哪个桶中,如果该桶中还有子桶,就判断在其哪个子桶中,直到最后找出目标。

    问题2:一共有N个机器,每个机器上有N个数,每个机器最多存 N 个数,如何找到 N^2 个数中的中数?

    解决方案1: hash分解 + 排序

    • 按照升序顺序把这些数字,hash划分为N个范围段。假设数据范围是2^32 的unsigned int 类型。理论上第一台机器应该存的范围为0~(2^32)/N,第i台机器存的范围是(2^32)*(i-1)/N~(2^32)*i/N。hash过程可以扫描每个机器上的N个数,把属于第一个区段的数放到第一个机器上,属于第二个区段的数放到第二个机器上,…,属于第N个区段的数放到第N个机器上。注意这个过程每个机器上存储的数应该是O(N)的。
    • 然后我们依次统计每个机器上数的个数,依次累加,直到找到第k个机器,在该机器上累加的数大于或等于(N^2)/2,而在第k-1个机器上的累加数小于(N^2)/2,并把这个数记为x。那么我们要找的中位数在第k个机器中,排在第(N^2)/2-x位。然后我们对第k个机器的数排序,并找出第(N^2)/2-x个数,即为所求的中位数的复杂度是O(N^2)的。

    解决方案2: 分而治之 + 归并

    先对每台机器上的数进行排序。排好序后,我们采用归并排序的思想,将这N个机器上的数归并起来得到最终的排序。找到第(N^2)/2个便是所求。复杂度是O(N^2 * lgN^2)的


    参考文章:

    教你如何迅速秒杀掉:99%的海量数据处理面试题_结构之法 算法之道-CSDN博客


    相关阅读:

    Spring常见面试题总结

    SpringMVC常见面试题总结

    Mybatis常见面试题总结

    MySQL常见面试题总结

    Redis常见面试题总结

    RabbitMQ消息队列常见面试题总结

    ElasticSearch搜索引擎常见面试题总结

    计算机网络常见面试题总结

    操作系统常见面试题总结

    Java基础、集合、多线程常见面试题总结

    Java虚拟机常见面试题总结

    Java常见设计模式总结

    海量数据处理的方法总结

    展开全文
  • 数据处理流程

    万次阅读 多人点赞 2019-02-21 16:53:13
    数据处理流程 1. 数据处理流程 网站流量日志数据分析是一个纯粹的数据分析项目,其整体流程基本上就是依据数据的处理流程进行。有以下几个大的步骤: 1.1 数据采集     &...

    大数据处理流程

    数据处理流程
    1. 数据处理流程
    网站流量日志数据分析是一个纯粹的数据分析项目,其整体流程基本上就是依据数据的处理流程进行。有以下几个大的步骤:
    1.1 数据采集
            数据采集概念,目前行业会有两种解释:一是数据从无到有的过程(web服务器打印的日志、自定义采集的日志等)叫做数据采集;另一方面也有把通过使用Flume等工具把数据采集到指定位置的这个过程叫做数据采集。
    关于具体含义要结合语境具体分析,明白语境中具体含义即可。
    1.2 数据预处理
            通过mapreduce程序对采集到的原始日志数据进行预处理,比如清洗,格式整理,滤除脏数据等,并且梳理成点击流模型数据。
    1.3 数据入库
            将预处理之后的数据导入到HIVE仓库中相应的库和表中。
    1.4 数据分析
            项目的核心内容,即根据需求开发ETL分析语句,得出各种统计结果。
    1.5 数据展现
            将分析所得数据进行数据可视化,一般通过图表进行展示。

    大数据流程

    扩展:
    1、数据处理主要技术

            Sqoop:作为一款开源的离线数据传输工具,主要用于Hadoop(Hive) 与传统数据库(MySql,PostgreSQL)间的数据传递。它可以将一个关系数据库中数据导入Hadoop的HDFS中,也可以将HDFS中的数据导入关系型数据库中。

            Flume:实时数据采集的一个开源框架,它是Cloudera提供的一个高可用用的、高可靠、分布式的海量日志采集、聚合和传输的系统。目前已经是Apache的顶级子项目。使用Flume可以收集诸如日志、时间等数据并将这些数据集中存储起来供下游使用(尤其是数据流框架,例如Storm)。和Flume类似的另一个框架是Scribe(FaceBook开源的日志收集系统,它为日志的分布式收集、统一处理提供一个可扩展的、高容错的简单方案)

            Kafka:通常来说Flume采集数据的速度和下游处理的速度通常不同步,因此实时平台架构都会用一个消息中间件来缓冲,而这方面最为流行和应用最为广泛的无疑是Kafka。它是由LinkedIn开发的一个分布式消息系统,以其可以水平扩展和高吞吐率而被广泛使用。目前主流的开源分布式处理系统(如Storm和Spark等)都支持与Kafka 集成。Kafka是一个基于分布式的消息发布-订阅系统,特点是速度快、可扩展且持久。与其他消息发布-订阅系统类似,Kafka可在主题中保存消息的信息。生产者向主题写入数据,消费者从主题中读取数据。作为一个分布式的、分区的、低延迟的、冗余的日志提交服务。和Kafka类似消息中间件开源产品还包括RabbiMQ、ActiveMQ、ZeroMQ等。

            MapReduce是Google公司的核心计算模型,它将运行于大规模集群上的复杂并行计算过程高度抽象为两个函数:map和reduce。MapReduce最伟大之处在于其将处理大数据的能力赋予了普通开发人员,以至于普通开发人员即使不会任何的分布式编程知识,也能将自己的程序运行在分布式系统上处理海量数据。

            Hive:MapReduce将处理大数据的能力赋予了普通开发人员,而Hive进一步将处理和分析大数据的能力赋予了实际的数据使用人员(数据开发工程师、数据分析师、算法工程师、和业务分析人员)。Hive是由Facebook开发并贡献给Hadoop开源社区的,是一个建立在Hadoop体系结构上的一层SQL抽象。Hive提供了一些对Hadoop文件中数据集进行处理、查询、分析的工具。它支持类似于传统RDBMS的SQL语言的查询语言,一帮助那些熟悉SQL的用户处理和查询Hodoop在的数据,该查询语言称为Hive SQL。Hive SQL实际上先被SQL解析器解析,然后被Hive框架解析成一个MapReduce可执行计划,并按照该计划生产MapReduce任务后交给Hadoop集群处理。

            Spark:尽管MapReduce和Hive能完成海量数据的大多数批处理工作,并且在打数据时代称为企业大数据处理的首选技术,但是其数据查询的延迟一直被诟病,而且也非常不适合迭代计算和DAG(有限无环图)计算。由于Spark具有可伸缩、基于内存计算能特点,且可以直接读写Hadoop上任何格式的数据,较好地满足了数据即时查询和迭代分析的需求,因此变得越来越流行。Spark是UC Berkeley AMP Lab(加州大学伯克利分校的 AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,它拥有Hadoop MapReduce所具有的优点,但不同MapReduce的是,Job中间输出结果可以保存在内存中,从而不需要再读写HDFS ,因此能更好适用于数据挖掘和机器学习等需要迭代的MapReduce算法。Spark也提供类Live的SQL接口,即Spark SQL,来方便数据人员处理和分析数据。Spark还有用于处理实时数据的流计算框架Spark Streaming,其基本原理是将实时流数据分成小的时间片段(秒或几百毫秒),以类似Spark离线批处理的方式来处理这小部分数据。

            Storm:MapReduce、Hive和Spark是离线和准实时数据处理的主要工具,而Storm是实时处理数据的。Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架。Storm对于实时计算的意义相当于Hadoop对于批处理的意义。Hadoop提供了Map和Reduce原语,使对数据进行批处理变得非常简单和优美。同样,Storm也对数据的实时计算提供了简单的Spout和Bolt原语。Storm集群表面上和Hadoop集群非常像,但是在Hadoop上面运行的是MapReduce的Job,而在Storm上面运行的是Topology(拓扑)。Storm拓扑任务和Hadoop MapReduce任务一个非常关键的区别在于:1个MapReduce Job最终会结束,而1一个Topology永远运行(除非显示的杀掉它,),所以实际上Storm等实时任务的资源使用相比离线MapReduce任务等要大很多,因为离线任务运行完就释放掉所使用的计算、内存等资源,而Storm等实时任务必须一直占有直到被显式的杀掉。Storm具有低延迟、分布式、可扩展、高容错等特性,可以保证消息不丢失,目前Storm, 类Storm或基于Storm抽象的框架技术是实时处理、流处理领域主要采用的技术。

            Flink:在数据处理领域,批处理任务和实时流计算任务一般被认为是两种不同的任务,一个数据项目一般会被设计为只能处理其中一种任务,例如Storm只支持流处理任务,而MapReduce, Hive只支持批处理任务。Apache Flink是一个同时面向分布式实时流处理和批量数据处理的开源数据平台,它能基于同一个Flink运行时(Flink Runtime),提供支持流处理和批处理两种类型应用的功能。Flink在实现流处理和批处理时,与传统的一些方案完全不同,它从另一个视角看待流处理和批处理,将二者统一起来。Flink完全支持流处理,批处理被作为一种特殊的流处理,只是它的数据流被定义为有界的而已。基于同一个Flink运行时,Flink分别提供了流处理和批处理API,而这两种API也是实现上层面向流处理、批处理类型应用框架的基础。

    2、数据存储主要技术

            HDFS:Hadoop Distributed File System,简称FDFS,是一个分布式文件系统。它有一定高度的容错性和高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS提供了一个高容错性和高吞吐量的海量数据存储解决方案。在Hadoop的整个架构中,HDFS在MapReduce任务处理过程在中提供了对文件操作的和存储的的支持,MapReduce在HDFS基础上实现了任务的分发、跟踪和执行等工作,并收集结果,两者相互作用,共同完成了Hadoop分布式集群的主要任务。

            HBase:HBase是一种构建在HDFS之上的分布式、面向列族的存储系统。在需要实时读写并随机访问超大规模数据集等场景下,HBase目前是市场上主流的技术选择。
    HBase技术来源于Google论文《Bigtable :一个结构化数据的分布式存储系统》。如同Bigtable利用了Google File System提供的分布式数据存储方式一样,HBase在HDFS之上提供了类似于Bigtable的能力。

            HBase解决了传递数据库的单点性能极限。实际上,传统的数据库解决方案,尤其是关系型数据库也可以通过复制和分区的方法来提高单点性能极限,但这些都是后知后觉的,安装和维护都非常复杂。
    而HBase从另一个角度处理伸缩性的问题,即通过线性方式从下到上增加节点来进行扩展。

                 HBase 不是关系型数据库,也不支持SQL,它的特性如下:

    1、大:一个表可以有上亿上,上百万列。
    2、面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
    3、稀疏:为空(null)的列不占用存储空间,因此表可以设计的非常稀疏。
    4、无模式::每一行都有一个可以排序的主键和任意多的列。列可以根据需求动态增加,同一张表中不同的行可以有截然不同的列。
    5、数据多版本:每个单元的数据可以有多个版本,默认情况下,版本号字段分开,它是单元格插入时的时间戳。
    6、数据类型单一:HBase中数据都是字符串,没有类型。

    展开全文
  • MapReduce处理数据去重与数据排序

    千次阅读 2015-03-24 11:23:21
    一:MapReduce处理数据去重 Map的key具有数据去重的功能 /* * 去除数据中相同数据 * 数据去重问题 * 以整个数据作为key发送出去, value为null */ public class DelsameMap extends Mapper { @Override ...
  • 海量数据处理技巧-转载

    万次阅读 2016-08-23 14:50:01
     教你如何迅速秒杀掉99的海量数据处理面试题前言何谓海量数据处理第一部分从setmap谈到hashtablehash_maphash_set 第二部分处理海量数据问题之六把密匙密匙一分而治之Hash映射 Hash_map统计 堆快速归并排序密匙...
  • 视音频数据处理入门

    千次下载 热门讨论 2016-01-29 16:58:05
    (1)像素数据处理程序。包含RGB和YUV像素格式处理的函数。 (2)音频采样数据处理程序。包含PCM音频采样格式处理的函数。 (3)H.264码流分析程序。可以分离并解析NALU。 (4)AAC码流分析程序。可以分离并解析ADTS帧。...
  • 总结了这67个pandas函数,完美解决数据处理,拿来即用!
  • 海量数据处理:排序问题

    千次阅读 2018-06-15 22:44:58
     针对这个问题,最容易想到的方法是将所有数据导入到内存中,然后使用常规的排序方法,例如插入排序,快速排序,归并排序等各种排序方法对数据进行排序,最后将排序好的数据存入文件.但这些方法在此并不适用,由于数据量...
  • 声明: 原文引用参考July大神的csdn博客文章 => 海量处理面试题 海量数据处理概述 所谓海量数据处理,就是数据量太大,无法在较短时间内迅速解决,无法一次性装入内存。本文在
  • Python数据处理与特征工程

    千人学习 2020-10-11 16:58:28
    CSDN全站首发——Python数据处理与特征工程 课程聚焦数据科学中,数据清洗与分析前的特征提取过程,解决数据科学中最重要的原始数据清洗和特征提取。 【定制课程 精准扫除学习盲点】 课程充分考虑各类实际问题...
  • 数据排序的几种方法

    千次阅读 2017-09-14 08:11:39
    一、直接通过SQL语句进行排序,如修改数据集SQL语句为: SELECT * FROM 订单 order by 运货费 desc 二、通过设置数据列的高级属性来实现排序效果。  选中有数据列的单元格,点击数据列上方的高级按钮,...
  • 常见的数据排序方法

    千次阅读 2021-03-06 16:32:03
    排序,顾名思义,就是将一组无序的数据按照指定的顺序(一般是从大到小或从小到大)进行排列的过程。不管是在Java还是在JavaScript、PHP、C/C++等编程语言中,对数组(或集合)进行排序都是程序开发人员的必备技能。排序...
  • hadoop 实现数据排序

    万次阅读 2022-01-03 16:08:45
    hadoop 实现数据排序
  • Pandas 提供很方便的一个数据类型— DataFrame,DataFrame 数据类型转换有两种: 1,利用Pandas 的 *read_ **函数...处理上面这种数据时通常会用到排序功能,Pandas 也提供了两种很方便的排序函数。 1,针对于某...
  • 海量数据处理算法

    千次阅读 2017-08-14 20:00:04
    海量信息即大规模数据,随着互联网技术的发展,...在海量数据中提取信息,不同于常规量级数据中提取信息,在海量信息中提取有用数据,会存在以下几个方面的问题: (1)数据量过大,数据中什么情况都可能
  • 单片机--数据排序实验

    千次阅读 多人点赞 2019-11-30 16:10:00
    任务:掌握数据排序程序的设计方法。 实验内容 将片内RAM 30H 开始的32 个单元中分布的随机8 位二进制数,按从小到大的顺序进行排序,排序后的数据仍然保存到30H 开始的32 个单元中(低地址存放小数据)。 实验...
  • SPSS 数据排序

    千次阅读 2021-02-21 22:51:37
    一、数据排序 数据排序的意义:数据排序在数据分析过程中非常重要,其便于了解数据的取值状况,SPSS可以对数据基于一个或多个个案(变量)进行排序。数据排序包括个案排序和变量排序,下面我将介绍这两种排序的操作...
  • 数据处理技术的总结与分析

    万次阅读 2019-05-26 17:29:55
    在我们实际生活中,事务型数据处理需求非常常见,例如:淘宝网站交易系统、12306网站火车票交易系统、超市POS系统等都属于事务型数据处理系统。 一数据分析处理需求分类 1 事务型处理 在我们实际生活中,事务型...
  • 学习情境九表格数据处理1典型工作过程实际工作情境描述分析目前各企事业单位工作人员经常在各种表格办公文件来处理数据比如数据编辑数据排序...数据处理相关知识点数据清单数据排序数据筛选分类汇总图表制作与编辑一数...
  • 文章目录内容介绍变量转换 内容介绍 将日常工作中遇到的数据标志变量转换的方法进行...连续数据: 连续数据只能归因于特定排序类别中的非数字数据。例如,用户的价值分为高,中和低,教育程度分为博士,研究生和学士
  • 面试海量数据处理题总结

    千次阅读 2019-04-15 20:13:29
    1、海量日志数据,提取出某日访问百度次数最多的那个IP。 2.统计最热门的10个查询串 3.有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。 4.有10个...
  • 数据处理时如何解决噪声数据?

    万次阅读 多人点赞 2019-04-30 10:08:05
    一、什么是噪声 在机器学习中我们在独立随机抽样的时候会...2.在同样的评判下会有不同的后续处理。 输入错误: 1.在收集数据的时由于数据源的随机性会出现错误(比如说,客户在填信息的时候出现的误填) 实际应...
  • 揭秘|每秒千万级的实时数据处理是怎么实现的?

    万次阅读 多人点赞 2019-06-20 12:38:53
    01背景闲鱼目前实际生产部署环境越来越复杂,横向依赖各种服务盘宗错节,纵向依赖的运行环境也越来越复杂。当服务出现问题的时候,能否及时在海量的数据中定位到问题根因,成为考验...
  • 数据处理的基本流程是什么?

    万次阅读 多人点赞 2021-04-11 23:51:37
    由于大数据处理的数据来源类型丰富,利用多个数据库来接收来自客户端的数据, 包括企业内部数据库、互联网数据和物联网数据,所以需要从数据中提取关系和实体, 经过关联和聚合等操作,按照统一定义的格式对数据
  • 数据处理基本过程

    万次阅读 多人点赞 2018-05-06 08:48:14
    把一些基本知识,总体架构记录一下,感觉坑很多,要学习的东西也很多,先简单了解一下基本知识什么是大数据:大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理数据集合,是需要新...
  • 海量数据处理:桶排序

    千次阅读 2021-04-13 20:33:48
    处理大量数据排序时,如果收到内存和时间的限制时,我们将数据进行拆分到小单元,单元内进行排序,这样就可以使用小内存排序大数据。也可以使用多线程排序小单元数据,最后进行数据合并完成整个数据排序。 在...
  • 数据处理的四大步骤

    万次阅读 2019-06-12 21:59:41
    具体的大数据处理方法确实有很多,但是根据笔者长时间的实践,总结了一个普遍适用的大数据处理流程,并且这个流程应该能够对大家理顺大数据的处理有所帮助。整个处理流程可以概括为四步,分别是采集、导入...
  • 这里写目录标题实验目的实验内容实验要求六种排序方法细解直接插入排序冒泡排序简单选择排序希尔排序快速排序归并排序六种排序好坏分析代码段...1.输入同样一组整型数据,作为待排序记录的关键字序列。 2.在进行直接

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,502,645
精华内容 3,001,058
关键字:

数据排序

友情链接: chap5.rar