一种数据分配方法和装置
技术领域
本发明涉及数据分析,更具体地说,涉及一种数据分配方法和装置。
背景技术
在需要同时分析大量的数据时,通常使用分布式的计算方式,将大量的数据划分成一份份小数据之后再分别在不同的数据处理终端上并行分析,或者在同一个数据处理终端的不同处理器上并行分析。这些数据处理终端或者数据处理终端上的线程被定义为计算结点。
以移动运营商分析用户的话单数据为例,为了快速分析指定时间段的话单数据,移动运营商通常将话单数据按照应用的需要分配给不同的计算终端同时进行,这涉及到对数据分析任务的划分,划分后的各个子任务之间应相互独立,所占数据的份额应大致相同,以便充分利用计算终端的多核多线程计算能力,同时划分后的各个子任务还应做到完成时间的均衡,以使总的计算时间最少。
比如说有两个应用:一个是统计每个用户在不同的扇区下通话的次数,一个是统计每个扇区下不同用户通话的次数,前者需要按照用户(通常是用户的手机号码),后者需要按照小区(通常是小区的编号)对话单数据进行划分,这样才能够使划分的任务独立互不影响。按照上述方法确定了数据划分的字段(如用户的手机号码、小区的编号)后,还需要确定需划分的子任务的个数,以及保证子任务所占数据的份额大致相同。常用的方法是按照上述字段数值可能在的范围区间进行划分,而这需要人工或者自动地对历史数据进行分析,统计上述字段的数值落在各个范围区间内的数量。由于需划分的子任务的个数是已知的,按照各个范围区间内数据的数量均衡的原则,可以反过来确定划分范围区间。
这种根据历史数据的统计情况进行细微的范围区间划分的方法,能够部分解决分布式计算中子任务划分的问题,但是这种方法由于存在以下缺陷而使其应用受到限制:
(1)用来划分的字段的数值需要是一个或者多个连续范围内的数值;
(2)如果有新的、不在原来的范围内的数据加入,通常不能处理;
(3)算法繁琐复杂,不易实现自动化,如进行自动处理的话需要进行大量的统计计算。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种能够使数据分配得更均匀以充分利用分布式计算终端的计算能力、且实现算法简单的数据分配方法和装置。
本发明解决其技术问题所采用的技术方案是:提出一种数据分配方法,包括如下步骤:
S1、获取需要分析的多个数据;
S2、依据数据分析需求确定用于划分所述需要分析的多个数据的字段;
S3、针对每个数据,将步骤S2中确定出的字段对应的值与预先确定的计算结点的个数执行取模运算;
S4、将所述需要分析的多个数据中取模运算后的值相同的数据分入同一计算结点。
一个实施例中,所述步骤S1进一步包括:
将获取到的所述需要分析的多个数据处理成统一的格式。
一个实施例中,所述步骤S3具体包括:
S31、确定所述字段的类型;
S32、在所述字段为中文时,将该中文对应的国家标准代码值与预先确定的计算结点的个数执行取模运算;
S33、在所述字段为英文时,将该英文对应的ASCII码值与预先确定的计算结点的个数执行取模运算;
S34、在所述字段为数字时,将该数字对应的值与预先确定的计算结点的个数执行取模运算。
一个实施例中,所述步骤S3具体包括:
选取所述字段对应的值的一部分值与预先确定的计算结点的个数执行取模运算。
一个实施例中,所述计算结点为数据处理终端或数据处理终端上的线程。
本发明为解决其技术问题还提出一种数据分配装置,包括:
数据获取模块,用于获取需要分析的多个数据;
字段确定模块,用于依据数据分析需求确定用于划分所述需要分析的多个数据的字段;
取模运算模块,用于针对每个数据,将所述字段确定模块确定出的字段对应的值与预先确定的计算结点的个数执行取模运算;
数据分配模块,用于将所述需要分析的多个数据中取模运算后的值相同的数据分入同一计算结点。
一个实施例中,所述数据获取模块进一步将获取到的所述需要分析的多个数据处理成统一的格式。
一个实施例中,所述取模运算模块具体包括:
字段类型确定子模块,用于确定所述字段的类型;
中文取模运算子模块,用于在所述字段为中文时,将该中文对应的国家标准代码值与预先确定的计算结点的个数执行取模运算;
英文取模运算子模块,用于在所述字段为英文时,将该英文对应的ASCII码值与预先确定的计算结点的个数执行取模运算;
数字取模运算子模块,用于在所述字段为数字时,将该数字对应的值与预先确定的计算结点的个数执行取模运算。
一个实施例中,所述取模运算模块进一步选取所述字段对应的值的一部分值与预先确定的计算结点的个数执行取模运算。
一个实施例中,所述计算结点为数据处理终端或数据处理终端上的线程。
本发明的数据分配方法和装置通过简单易实现的取模算法将获取的多个数据分配到对应的终端或对应的线程进行处理,能够尽量的做到各个子任务所占数据的份额大致相同,使数据分配得更均衡,充分利用了数据处理终端的多核多线程计算能力,从而使得不同终端或不同线程分析处理数据的时间更接近,达到总的计算时间最少。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明一个实施例的数据分配方法的流程图;
图2是图1中步骤130的一具体实施例的流程图;
图3是本发明一个实施例的数据分配装置的逻辑结构示意图;
图4是图3中取模运算模块的一具体实施例的逻辑结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提出一种数据分配方法和装置,将用于划分需要分析的多个数据的字段与用于分析数据的计算结点的个数执行取模运算,并将取模运算后的值相同的数据分入同一计算结点,能够尽量的做到各个计算结点上子任务所占数据的份额大致相同,使数据分配得更均衡,充分利用了数据处理终端的多核多线程计算能力,从而使得不同终端或不同线程分析处理数据的时间更接近,达到总的计算时间最少。
图1示出了本发明一个实施例的数据分配方法100的流程图。如图1所示,该数据分配方法100包括:
步骤110,获取需要分析的多个数据。该步骤中,需要分析的数据可以是任意范围内的数据,包括中文、英文、数字中的至少一种,例如,需要分析的数据为数字类型时,该数字类型可以为用户的手机号码等。获取的方式可以是定时或实时从存储有数据的文件中获取。一个实施例中,当获取的需要分析的多个数据格式不同时,步骤110还包括将获取到的需要分析的多个数据处理成统一的格式,以便后续能够更快速地对同一格式的数据进行处理。
步骤120,依据数据分析需求确定用于划分所述需要分析的多个数据的字段。该步骤中,以用户的实际数据分析需求为依据,确定用于将需要分析的数据划分至计算结点(不同终端或同一终端不同线程)的字段。比如说,在需要统计每个用户在不同的扇区下通话的次数时,将每个用户的标识(通常是该用户的手机号码)作为划分数据的字段;在需要统计每个扇区下不同用户通话的次数时,将小区标识(通常是小区的编号)作为划分数据的字段。
步骤130,针对每个数据,将步骤120中确定出的字段对应的值与预先确定的计算结点的个数执行取模运算。其中,取模运算是指求余运算,取模运算的结果是指对整数除以被除数后无法除尽的余数。例如,28对5取模后的运算结果为3。计算结点(不同终端或同一终端不同线程)的个数是预先已知的。例如,假设用于划分需要分析的数据的字段为用户的手机号码,该用户的手机号码为13600000000,预先确定6个终端并行分析数据,则在终端本身硬件条件允许的情况下,将用户的手机号码对应的值13600000000与计算结点的个数6取模。
一个优选实施例中,步骤130中可选取该用于划分需要分析的多个数据的字段对应的值的一部分值与预先确定的计算结点的个数执行取模运算。例如,假设预先确定的计算结点个数为6,用于划分需要分析的数据的字段为用户的手机号码,且该用户的手机号码为13600000000,则可选取该手机号码的后9位数字的值与预先确定的计算结点的个数执行取模运算,即600000000mod6=0,其中,mod指取模运算。只选取需要分析的数据中的部分值参与取模运算能够加快处理速度,选取的值越少,处理速度越快,但是选取的值越少,分配的数据也越不均衡,因此,实际工作中可根据需要来选取参与取模运算的值,当侧重于处理速度时,选择数据中较少的值参与取模运算,相反,选择数据中较多的值参与取模运算。
步骤140,以取模运算后的值为依据,将所述需要分析的多个数据中取模运算后的值相同的数据分入同一计算结点(同一终端或同一线程)。一个实施例中,将取模运算后的值相同的数据都分入同一终端处理,例如,假设数据1、数据2、数据3取模运算后的值都为0,数据4、数据5、数据6取模运算后的值都为1,则将取模运算后值为0的数据1、数据2、数据3都分入终端0处理,将取模运算后值为1的数据4、数据5、数据6都分入终端1处理等。
在将需要分析的数据按照上述数据分配方法100分配给相应的计算结点之后,计算结点根据接收的分析指令对分配的数据进行后续的分析处理。
一个实施例中,参见图2所示,上述步骤130中针对每个数据将确定出的字段对应的值与预先确定的计算结点的个数执行取模运算具体包括:
步骤131,确定该用于划分需要分析的多个数据的字段的类型。如前所述,需要分析的数据可以是任意范围内的数据,包括中文、英文、数字中的至少一种。因而,该字段也分中文、英文和数字三种类型。
步骤132,在用于划分需要分析的数据的字段为中文时,将该中文对应的国家标准代码值与预先确定的计算结点的个数执行取模运算。其中,国家标准代码,简称国标码,是中华人民共和国的中文常用汉字编码集,每个汉字对应一个国家标准代码的值,比如“啊”字对应的国家标准代码的值为“1601”。
步骤133,在用于划分需要分析的数据的字段为英文时,将该英文对应的ASCII码值与预先确定的计算结点的个数执行取模运算。ASCII码(AmericanStandard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统,使用指定的7位或8位二进制数组合来表示128或256种可能的字符。例如,英文字母“e”对应的ASCII码值为01100101。
步骤134,在用于划分需要分析的数据的字段为数字时,将该数字对应的值与预先确定的计算结点的个数执行取模运算。例如,假设用于划分需要分析的数据的字段为用户的手机号码,该用户的手机号码为13600000000,预先确定6个终端并行分析数据,在终端本身硬件条件允许的情况下,将用户的手机号码对应的值13600000000与6取模。
本发明的实施例通过以上取模算法将获取的多个数据分配到对应的计算结点,由于汉字、英文、数字在计算机内部都是以数字存放的,因此,都可以适用上述取模算法,并且由于汉字和英文的数值随机性更强,更适合上述取模算法。
图3示出了本发明一个实施例的数据分配装置200的逻辑结构示意图。如图3所示,该数据汇总装置200包括数据获取模块210、字段确定模块220、取模运算模块230和数据分配模块240。其中,数据获取模块210用于获取需要分析的多个数据。优选实施例中,数据获取模块210可以定时或实时从存储有数据的文件中获取需要分析的多个数据。进一步,数据获取模块210可以将获取到的需要分析的多个数据处理成统一的格式,以便后续能够更快速地对同一格式的数据进行处理。字段确定模块220用于依据数据分析需求确定用于划分需要分析的多个数据的字段。例如,在需要统计每个用户在不同的扇区下通话的次数时,字段确定模块220将每个用户的标识(通常是该用户的手机号码)作为划分数据的字段;在需要统计每个扇区下不同用户通话的次数时,字段确定模块220将小区标识(通常是小区的编号)作为划分数据的字段。取模运算模块230用于针对每个数据,将字段确定模块220确定出的字段对应的值与预先确定的计算结点的个数执行取模运算。例如,若字段确定模块220确定出用于划分需要分析的数据的字段为用户的手机号码,该用户的手机号码为13600000000,预先确定6个终端并行分析数据,则取模运算模块230执行13600000000mod6,其中,mod指取模运算。一个实施例中,取模运算模块230可选取该用于划分需要分析的多个数据的字段对应的值的一部分值与预先确定的计算结点的个数执行取模运算。同样以上例为例,取模运算模块230可选取该手机号码的后9位数字的值与预先确定的计算结点的个数执行取模运算,即600000000mod6=0。数据分配模块240用于将需要分析的多个数据中取模运算后的值相同的数据分入同一计算结点(同一终端或同一线程)。例如,假设数据1、数据2、数据3取模运算后的值都为0,数据4、数据5、数据6取模运算后的值都为1,则将取模运算后值为0的数据1、数据2、数据3都分入终端0处理,将取模运算后值为1的数据4、数据5、数据6都分入终端1处理等。
一个具体实施例中,参见图4所示,上述取模运算模块230具体包括字段类型确定子模块231、中文取模运算子模块232、英文取模运算子模块233和数字取模运算子模块234。其中,字段类型确定子模块231用于确定所述字段的类型。需要分析的数据可以是任意范围内的数据,包括中文、英文、数字中的至少一种,因而,该字段也分中文、英文和数字三种类型。中文取模运算子模块232用于在所述字段为中文时,将该中文对应的国家标准代码值与预先确定的计算结点的个数执行取模运算。英文取模运算子模块233用于在所述字段为英文时,将该英文对应的ASCII码值与预先确定的计算结点的个数执行取模运算。数字取模运算子模块234用于在所述字段为数字时,将该数字对应的值与预先确定的计算结点的个数执行取模运算。
以上借助方法步骤描述了本发明的技术特征及其关系,所述方法步骤的界限范围和顺序是为了便于描述任意定义的。只要能够实现该技术特征及其关系,也可应用其它界限和顺序。任何这样的其它界限或顺序因此落入本发明的范围和精神实质。
以上还借助功能模块对本发明的技术特征及其关系进行了描述。所述功能模块的界限和各功能模块的关系是为了便于描述任意定义的。只要能够实现该技术特征及其关系,也可应用其它的界限或关系。任何这样的其它界限或关系也因此落入本发明的范围和精神实质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。