一种确定TopN数据的方法、系统及设备
技术领域
本说明书涉及计算机技术领域,尤其涉及一种确定TopN数据的方法、系统及设备。
背景技术
在大数据开发过程中,经常需要按照某个维度确定该维度下排序(这里的排序可以是从大到小排列也可以是从小到大排列)靠前的N个数据(N为自然数,以下称为TopN数据)。为了确定TopN数据,通常做法是先对数据执行分组,再以并行处理的方式分别在各个数据分组内执行组内排序,最终根据所有数据分组的排序结果确定TopN数据。这种对多个分组并行执行组内排序的方式,大大提高了数据处理速度。
上述对多个数据分组并行进行组内排序的处理操作通常是通过MapReduce实现的。MapReduce是面向大数据并行处理的计算框架,其处理过程有一个特点,同一个数据分组的(具有相同分组标识(key值))的数据只会分发给同一个reduce执行处理。并行处理的多个reduce中,运行时间最长的单个reduce任务实例,决定了整个并行处理的进度。如果多个数据分组的数据量分布不均匀,出现严重的数据倾斜,就会意味着多个并行处理的reduce所处理的数据量存在严重差异。某个或某几个reduce需要消耗的数据处理时间远大于其他reduce。对于数据处理的整体进程来说,reduce阶段就可能会卡在接近完成(大部分reduce已完成数据处理,但少数reduce没有完成数据处理)的环节而一直无法结束,从而导致确定TopN数据的执行时间被大大拖长。
针对上述这种由于数据分组的数据量分布不均匀所产生的数据倾斜,进而导致确定TopN数据执行时间拖长的问题,现有技术采取的方案是,在初次分组后对数据量相对较大的初级分组执行二次分组,将其再分为多个数据量相对较小的次级分组,从而分配给多个reduce并行处理。但是,执行二次分组的前提条件是需要了解初次分组的数据量分布情况,确定需要执行二次分组的初级分组有哪些,同时还要确定需要确定分出的次级分组的个数。上述执行二次分组所需的前置操作不但具备相当的实现难度,而且在执行时还会消耗较多的数据处理资源并占用较长的数据处理时间。这就导致二次分组不但没有通过平衡数据分布来提高并行处理速度,反而增加了确定TopN数据的操作难度以及操作耗时。
因此,需要一种处理速度更快、执行更为简单快捷的确定TopN数据的方法。
发明内容
有鉴于此,本说明书实施例提供了一种确定TopN数据的方法、系统、设备及计算机可读介质,用于解决现有技术中确定TopN数据操作执行过程复杂、执行耗时长的问题。
本说明书实施例采用下述技术方案:
本说明书实施例提供一种确定TopN数据的方法,包括:
根据数据项的名称标识对原数据执行分组操作,获得一个或多个原数据分组,每个所述名称标识对应一个所述原数据分组;
针对每个所述原数据分组,根据数据项的排序字段执行去重操作,获得去重数据分组,其中,同一所述原数据分组内,排序字段的值相同的多个数据项只保留其中的一个数据项;
分别针对每个所述去重数据分组,基于所述排序字段的值对所述数据项执行组内排序操作;
根据所述组内排序操作的操作结果,分别确定每个所述原数据分组中所述排序字段的值排在前N位的数据项,其中,N的值为TopN中N对应的值,N为自然数。
优选地,在一实施例中:
所述组内排序操作还包括,根据所述组内排序操作的结果确定所述去重数据分组内数据项对应的组内序号;
分别确定每个所述原数据分组中所述排序字段的值排在前N位的数据项,包括:
保留每个所述去重数据分组内的阈值数据项,其中,所述阈值数据项为所述组内序号等于N的数据项;
确定数据项,对比所述原数据分组内的数据项与对应的所述阈值数据项,根据对比结果确定所述原数据分组中所述排序字段的值排在前N位的数据项。
优选地,在一实施例中,根据对比结果确定所述原数据分组中所述排序字段的值排在前N位的数据项,其中:
当TopN的取值顺序为从小到大时,从所述原数据分组中确定排序字段的值小于等于所述阈值数据项的数据项;
当TopN的取值顺序为从大到小时,从所述原数据分组中确定排序字段的值大于等于所述阈值数据项的数据项。
优选地,在一实施例中:
所述分组操作包括,确定所述数据项对应的分组字段;
所述方法还包括,生成临时数据项表,所述临时数据项表包括所述分组字段以及所述排序字段;
所述分组排序操作包括,针对所述临时数据项表执行基于所述分组字段以及所述排序字段的分组排序,确定所述组内序号;
保留每个所述去重数据分组内的阈值数据项,其中,保留所述临时数据项表中组内序号等于N的所述数据项;
确定数据项,其中,建立所述临时数据项表与所述原数据分组的关联,基于所述关联对比所述原数据分组内的数据项与对应的所述阈值数据项,确定所述原数据分组中所述排序字段的值排在前N位的数据项。
优选地,在一实施例中:
在所述生成临时数据项表步骤中根据所述分组操作以及所述去重操作的结果生成所述临时数据项表;
或者,
在所述生成临时数据项表步骤中根据所述分组操作的结果生成临时数据项表,在所述去重操作中针对所述临时数据项表执行所述去重操作;
或者,
在所述生成临时数据项表步骤中根据所述原数据生成临时数据项表,在所述分组操作以及所述去重操作中针对所述临时数据项表执行所述分组操作以及所述去重操作。
优选地,在一实施例中,建立所述临时数据项表与所述原数据的关联,包括:
将所述原数据分组与所述临时数据项表执行mapjoin关联,关联字段为所述分组字段。
优选地,在一实施例中,保留每个所述去重数据分组内的阈值数据项,其中,当最大的所述组内序号小于N时,所述阈值数据项为组内序号最大的数据项。
本说明书实施例还提出了一种确定TopN数据的系统,包括:
分组模块,根据数据项的名称标识对原数据执行分组操作,获得一个或多个原数据分组,其中,每个所述名称标识对应一个所述原数据分组;
去重模块,其配置为针对每个所述原数据分组,根据数据项的排序字段执行去重操作,获得去重数据分组,其中,同一所述原数据分组内,排序字段的值相同的多个数据项只保留其中的一个数据项;
排序模块,其配置为分别针对每个所述去重数据分组,基于所述排序字段的值对所述数据项执行组内排序操作;
数据项提取模块,其配置为根据所述组内排序操作的操作结果,分别确定每个所述原数据分组中所述排序字段的值排在前N位的数据项,其中,N的值为TopN中N对应的值,N为自然数。
优选地,在一实施例中:
所述排序模块还配置为确定所述去重数据分组内数据项对应的组内序号;
所述数据项确定模块包括:
筛选单元,其配置为保留每个所述去重数据分组内的阈值数据项,其中,所述阈值数据项为所述组内序号等于N的数据项;
确定单元,其配置为确定数据项,其中,对比所述原数据分组内的数据项与对应的所述阈值数据项,确定所述原数据分组中所述排序字段的值排在前N位的数据项。
优选地,在一实施例中,所述确定单元配置为:
当TopN的取值顺序为从小到大时,从所述原数据分组中确定排序字段的值小于等于所述阈值数据项的数据项;
当TopN的取值顺序为从大到小时,从所述原数据分组中确定排序字段的值大于等于所述阈值数据项的数据项。
优选地,在一实施例中:
所述分组模块还配置为确定所述数据项对应的分组字段;
所述系统还包含临时表创建模块,所述临时表创建模块配置为生成包含所述分组字段以及所述排序字段的临时数据项表;
所述排序模块还配置为针对所述临时数据项表执行基于所述分组字段以及所述排序字段的分组排序,确定所述组内序号;
所述筛选单元配置为保留所述临时数据项表中组内序号等于N的所述数据项;
所述确定单元配置为建立所述临时数据项表与所述原数据分组的关联,基于所述关联对比所述原数据分组内的数据项与对应的所述阈值数据项,确定所述原数据分组中所述排序字段的值排在前N位的数据项。
优选地,在一实施例中:
所述临时表创建模块配置为根据所述分组操作以及所述去重操作的结果生成所述临时数据项表;
或者,
所述临时表创建模块配置为根据所述分组操作的结果生成临时数据项表,所述去重模块配置为针对所述临时数据项表执行所述去重操作;
或者,
所述临时表创建模块配置为根据所述原数据生成临时数据项表,所述分组模块配置为针对所述临时数据项表执行所述分组操作,所述去重模块配置为针对所述临时数据项表执行所述去重操作。
优选地,在一实施例中,所述筛选单元还配置为,保留每个所述去重数据分组内的阈值数据项,其中,当最大的所述组内序号小于N时,所述阈值数据项为组内序号最大的数据项。
本说明书实施例还提出了一种用于在用户设备端进行信息处理的设备,该设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该设备执行本说明书实施例所述的方法。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:提出一种确定TopN数据的方法流程,在不采用二次分组的前提下,通过减少分组排序处理的目标数据量来降低确定TopN数据的操作耗时,并保证确定TopN数据操作流程的简单易行。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为现有技术方法执行流程图;
图2以及图4为本说明书实施例中的方法执行流程图;
图3为本说明书实施例中的方法部分执行流程图;
图5~图7为本说明书实施例中系统结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案执行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在现有技术中,确定TopN数据在操作难度以及操作耗时上并不能很好的达成使用作者的要求。针对现有技术存在的问题,本发明提出了一种确定TopN数据的方法。为了提出本说明书实施例的方法,发明人首先对现有技术的执行细节做如下分析。
在现有技术中,在确定TopN数据的过程中执行数据分组的主要目的是通过多个分组数据的并行执行来加快数据处理速度。但是,数据分组时存在的数据倾斜问题使得并行执行的提速效果并不理想,而采用二次分组的方式来消除数据倾斜又必不可免的增加了数据处理流程复杂度,带来了新的数据处理耗时增加,以及数据处理执行难度加大的问题。因此,为了在尽可能的保证处理流程简单易行的前提下提高确定TopN数据的处理速度,一般的出发点是确保分组结果的数据平衡。
但是,在实际应用场景中,造成分组结果的数据倾斜问题的根本原因是分组操作所针对的原数据分布不均匀。由于业务本身决定了数据分布的均匀程度,因此原数据的分布不均匀单从业务逻辑方面无法完全解决。如商户的交易数据,一开始是无法确定哪些商户会成为热点商户,并且商户累积的交易数据量级也会随时间发生变化。
因此,本说明书实施例的方案定位在原数据分布不均匀的应用场景下,不考虑在分组过程均匀分布分组数据,而是通过对分组结果进行数据筛选,以尽可能的减少每个分组数据的数据量,从而实现快速确定TopN数据。
在实际应用的一种场景下,确定TopN数据的应用场景主要是分别针对不同商户确定交易金额最大/最小的N个交易金额对应的所有交易记录(确定TopN的交易金额对应的所有交易记录)。其中,同一商户下,只针对交易金额进行筛选,只要交易金额满足是全部交易金额中最大/最小的N个,该交易金额对应的多笔相同交易金额的交易记录需要全部筛选出来。
进一步分析上述确定TopN数据的实际应用场景。上述确定TopN数据的实际应用场景在执行上可以分成二部分,一是针对同一名称标识(比如,商户名称)的排序字段(比如,交易金额)确定TopN数据,确定排序字段最大/最小的N个排序字段;二是确定上述N个排序字段对应的所有数据项(交易记录)。在同一名称标识下,虽然最终结果会将满足TopN需求的排序字段对应的所有数据项全部罗列,但是,排序字段相同的数据项在执行确定排序字段的TopN数据时是不需要重复计入的。也就是说,在确定排序字段的TopN数据时,对排序字段相同的数据项执行的排序操作就包含了不必要的重复操作。
以具体的应用场景为例,如表1所示,如果要针对表1的交易记录分别确定每个商户交易金额为TopN的所有交易记录。在针对商户a进行确定TopN数据操作时需要对三条交易金额为100的交易记录进行操作。
表1
如图1所示,在分组操作(S110)中,按照不同的商户名称将表1分为a、b、c三组;然后分别针对每个分组内的交易记录进行组内排序(S120);最后根据组内排序结果确定每个分组内交易金额排在前两位的交易记录。在步骤S120中,分组排序需要针对三条交易金额为100的交易记录进行排序操作,该重复操作会大大延长排序操作的执行耗时。
因此,在本说明书实施例的方法中,针对同一名称标识的数据项执行去重操作,排序字段的值相同的多个数据项只保留其中的一个数据项。这样,就相当于减少了每个名称标识所对应的数据量。尤其的,在实际应用场景中,同一商户下,交易记录越多,交易金额相同的交易记录出现的频次也越大。因此,筛除同一名称标识(比如,商户名称)下相同排序字段(比如,交易金额)的数据项(比如,交易记录)也会从侧面改善不同名称标识(比如,商户名称)间数据项(比如,交易记录)数量分布不均匀的问题。
接下来基于附图详细描述根据本说明书实施例的方法的详细流程。在本说明书实施例中,原数据为包含多个数据项的数据集合,每个数据项至少包含名称标识以及排序字段。本说明书实施例的方法针对原数据执行基于名称标识以及排序字段的确定TopN(N为根据操作需求确定的自然数)数据的操作。分别确定每个名称标识下,排序字段的值最大/最小的N个排序字段对应的该名称标识下的所有数据项。
如图2所示,在一实施例中,方法包括以下流程:
S210,分组操作,根据数据项的名称标识对原数据执行分组操作,获得一个或多个原数据分组,每个名称标识对应一个原数据分组;
S220,去重操作,针对每个所述原数据分组,根据数据项的排序字段执行去重操作,获得去重数据分组,其中,同一原数据分组内,排序字段的值相同的多个数据项只保留其中的一个数据项;
S230,排序操作,分别针对每个去重数据分组,基于排序字段的值对数据项执行组内排序操作;
S240,确定数据项,根据步骤S230的组内排序操作的操作结果,分别确定每个原数据分组中排序字段的值排在前N位的数据项,其中,N的值为TopN中N对应的值,N为自然数。
根据本发明提出的确定TopN数据的方法,可以有效减少数据分组内需要执行排序操作的数据项个数,从而减少该数据分组的数据处理耗时。同时,考虑到越是数据量大的数据分组所包含的排序字段的值相同的数据项也就越多,因此,去重操作可以降低数据量相对较大的数据分组的数据量,有效改善多个数据分组间的数据分布不均的问题,在对多个数据分组进行并行处理的过程中,有效改善由数据分组数据倾斜带来的单个处理进程处理时间过长而造成的整个并行处理进程卡顿的问题。
进一步的,在一应用场景中,如果需要针对某个名称标识对应的数据项进行单独的确定TopN数据操作。在一实施例中,针对原数据进行基于名称标识的数据提取,提取同一名称标识下的所有数据项,然后将提取的数据项作为一个原数据分组(相当于不进行数据分组操作)。
具体的,在一应用场景中,原数据包含的数据项为商户交易记录,数据项的名称标识为商户名称(商户ID),数据项的排序字段为交易金额,针对每一个商户ID划分一个数据分组。
优选地,在一实施例中,采用MapReduce处理多个数据分组的并行处理任务。MapReduce是一种成熟的并行处理计算框架,其适应大数据的并行处理操作任务,可以有效简化数据处理流程并提高数据处理速度。
进一步的,考虑到确定TopN数据一般要求数据排序是连续的,并且值相同的数据排序相同,在一实施例中,通过row_number()函数实现本发明的排序操作。
以一应用实例为例,原数据如表1所示。针对表1的数据执行分组,得到如表2、表3以及表4所示的三个原数据分组。
商户ID |
交易金额 |
订单号 |
其他字段 |
a |
100 |
*** |
*** |
a |
100 |
*** |
*** |
a |
100 |
*** |
*** |
a |
101 |
*** |
*** |
a |
120 |
*** |
*** |
a |
101 |
*** |
*** |
a |
130 |
*** |
*** |
表2
商户ID |
交易金额 |
订单号 |
其他字段 |
c |
20 |
*** |
*** |
c |
30 |
*** |
*** |
c |
35 |
*** |
*** |
c |
37 |
*** |
*** |
c |
40 |
*** |
*** |
表3
商户ID |
交易金额 |
订单号 |
其他字段 |
b |
123 |
*** |
*** |
b |
456 |
*** |
*** |
b |
123 |
*** |
*** |
b |
456 |
*** |
*** |
b |
123 |
*** |
*** |
b |
456 |
*** |
*** |
b |
12.4 |
*** |
*** |
b |
456 |
*** |
*** |
b |
100 |
*** |
*** |
b |
101 |
*** |
*** |
b |
120 |
*** |
*** |
b |
120 |
*** |
*** |
b |
120 |
*** |
*** |
b |
123 |
*** |
*** |
表4
针对表2以及表4分别执行基于交易金额的去重操作,得到如表5以及表6所示的去重数据分组。
商户ID |
交易金额 |
订单号 |
其他字段 |
a |
100 |
*** |
*** |
a |
101 |
*** |
*** |
a |
120 |
*** |
*** |
a |
130 |
*** |
*** |
表5
商户ID |
交易金额 |
订单号 |
其他字段 |
b |
123 |
*** |
*** |
b |
456 |
*** |
*** |
b |
12.4 |
*** |
*** |
b |
100 |
*** |
*** |
b |
101 |
*** |
*** |
b |
120 |
*** |
*** |
表6
对比表2、表3以及表4组成的数据分组组合与表5、表3以及表6组成的数据分组组合。去重操作后的数据量明显减小,数据分组数据量分布不均的问题得到明显改善。
本发明的方法通过减少分组排序处理的目标数据量来有效改善多个数据分组间的数据分布状态,有效改善数据倾斜带来的问题,并最终降低确定TopN数据的操作耗时。由于本发明的方法并不需要采用二次分组,因此相较于现有技术,本发明确定TopN数据的操作流程简单易行,具有很大的实用价值。
进一步的,一般的,在确定了每个去重数据分组中排序字段的TopN后,可以直接从每个去重数据分组中确定对应的TopN数据项。但是,由于本说明书实施例中进行了去重操作,直接从每个去重数据分组确定的对应的TopN数据项就遗漏了排序字段值相同的重复数据项。因此,在一实施例中,在针对每个去重数据分组完成排序后,并不是分别针对每个去重数据分组执行确定TopN数据操作,而是从每个去重数据分组中确定出阈值数据项,该阈值数据项用于从原数据分组中确定TopN数据项。
如图3所示,在一实施例中,在基于排序字段的值对去重数据分组中的数据项执行组内排序操作后执行如下步骤:
S310,确定组内序号,根据组内排序操作的结果确定去重数据分组内数据项对应的组内序号;
S320,筛选阈值数据项,保留每个去重数据分组内的阈值数据项,其中,阈值数据项为组内序号等于N的数据项;
S330,确定数据项,对比原数据分组内的数据项与对应的阈值数据项,根据对比结果确定原数据分组中排序字段的值排在前N位的数据项。
具体的,在一实施例中,在步骤S330中:
当TopN的取值顺序为从小到大时,从原数据分组中确定排序字段的值小于等于对应阈值数据项的数据项;
当TopN的取值顺序为从大到小时,从所述原数据分组中确定排序字段的值大于等于对应阈值数据项的数据项。
以表5、表3以及表6组成的数据分组组合为例。经过组内排序并赋予组内序号得到表7、表8以及表9所示的排序结果。
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
1 |
a |
130 |
*** |
*** |
2 |
a |
120 |
*** |
*** |
3 |
a |
101 |
*** |
*** |
4 |
a |
100 |
*** |
*** |
表7
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
1 |
c |
40 |
*** |
*** |
2 |
c |
37 |
*** |
*** |
3 |
c |
35 |
*** |
*** |
4 |
c |
30 |
*** |
*** |
5 |
c |
20 |
*** |
*** |
表8
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
1 |
b |
456 |
*** |
*** |
2 |
b |
123 |
*** |
*** |
3 |
b |
120 |
*** |
*** |
4 |
b |
101 |
*** |
*** |
5 |
b |
100 |
*** |
*** |
6 |
b |
12.4 |
*** |
*** |
表9
确定Top2数据,确定排序字段的值最大的2个排序字段对应的数据项。保留去重数据分组内组内序号等于2的数据项,得到表10、表11以及表12所示的结果。
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
2 |
a |
120 |
*** |
*** |
表10
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
2 |
c |
37 |
*** |
*** |
表11
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
2 |
b |
123 |
*** |
*** |
表12
从原数据分组中取出排序字段的值小于等于去重数据分组内最终保留下来的数据项的排序字段的值(120、37以及123)的2个排序字段对应的数据项。最终得到如表13、14、以及15所示的结果。
商户ID |
交易金额 |
订单号 |
其他字段 |
a |
120 |
*** |
*** |
a |
130 |
*** |
*** |
表13
商户ID |
交易金额 |
订单号 |
其他字段 |
c |
37 |
*** |
*** |
c |
40 |
*** |
*** |
表14
商户ID |
交易金额 |
订单号 |
其他字段 |
b |
123 |
*** |
*** |
b |
456 |
*** |
*** |
b |
123 |
*** |
*** |
b |
456 |
*** |
*** |
b |
123 |
*** |
*** |
b |
456 |
*** |
*** |
b |
456 |
*** |
*** |
b |
123 |
*** |
*** |
表15
进一步的,考虑到对原数据执行分组操作后,各个数据分组需要分别执行去重、排序以及数据项筛选操作,最后又需要统一汇总处理结果并参与到针对每个原数据分组的TopN数据项确定操作中。因此,如果分别针对每个数据分组独立保存,虽然便于分别的去重排序以及数据项筛选,但是最后需要再增加一个处理结果汇总的步骤。为了进一步简化数据处理执行步骤,优选地,在一实施例中,构造临时数据项表(tmp_table),该临时数据项表包含分组字段(a)以及排序字段(b)。这样就可以将不同的数据分组统一保存到一个表格中执行处理。
进一步的,在本发明的方法中,对临时数据项表的生成节点不做严格限制。本领域的技术人员可以根据实际需求选在方法执行过程中的合适节点生成临时数据项表。具体的,在一实施例中,根据分组操作以及去重操作的结果生成临时数据项表。在一实施例中,根据分组操作的结果生成临时数据项表,在去重操作中针对临时数据项表执行去重操作。在一实施例中,根据原数据生成临时数据项表,在分组操作中针对临时数据项表执行分组操作,分组操作执行完毕后,在去重操作中针对临时数据项表执行去重操作。
优选地,在一实施例中,根据分组操作以及去重操作的结果生成临时数据项表。这样就可以尽可能降低临时数据项表的数据量,避免出现冗余数据处理操作。具体的,如图4所示,在一实施例中,确定TopN数据的方法流程包括:
S410,根据数据项的名称标识对原数据执行分组操作,获得一个或多个原数据分组,每个名称标识对应一个原数据分组,根据分组结果确定数据项对应的分组字段;
S420,基于分组操作的分组结果执行去重操作,针对每个原数据分组,根据数据项的排序字段执行去重操作,获得去重数据分组,其中,同一原数据分组内,排序字段的值相同的多个数据项只保留其中的一个数据项;
S430,根据分组操作以及去重操作的结果生成临时数据项表(具体的,根据去重数据分组生成临时数据项表),临时数据项表包括分组字段以及排序字段;
S440,对临时数据项表中的数据项执行基于分组字段以及排序字段的分组排序,确定每个数据分组内的数据项对应的组内序号;
S450,对临时数据项表中的数据项执行数据项过滤,保留组内序号等于N的数据项;
S460,建立临时数据项表与原数据的关联;
S470,基于临时数据项表与原数据的关联对比原数据分组内的数据项与对应的阈值数据项,确定原数据分组中排序字段的值排在前N位的数据项。
将不同的数据分组统一保存到一个表格中执行处理。这样就可以在不影响针对每个数据分组分别执行去重、排序以及数据项筛选操作的前提下,不需要构造单独的数据处理结果汇总步骤,就可以令所有的数据分组的处理结果参与到针对原数据的数据项抽取操作中。
进一步的,在一实施例中,临时数据项表的分组字段可以由多个字段共同组成,也可以是0个字段组成。这样,在不改变临时数据项表的结构的前提下容纳了分组操作输出一个分组(不分组),针对原数据的原表进行全表排序的应用场景。
进一步的,在一实施例中,在建立临时数据项表(tmp_table)与原数据的关联的过程中,考虑到此时的tmp_table中每个分组字段只会对应一个值,组成一个k-v结构的表,除非tmp_table表包含的key值非常多,tmp_table经过上述过程处理之后形成的表是一个小表。因此,采用mapjoin函数建立临时数据项表(tmp_table)与原数据的关联。MapJoin是Hive的一种优化操作,其适用于小表JOIN大表的场景,由于表的JOIN操作是在Map端且在内存执行的,所以其并不需要启动Reduce任务也就不需要经过重排(shuffle)阶段,从而能节省资源提高JOIN效率。
具体的,在一实施例中,在建立临时数据项表(包含字段a以及b的tmp_table)与原数据分组的关联的过程中,将原数据分组与临时数据项表(tmp_table)执行mapjoin关联,关联字段为分组字段a,生成(原数据集+tmp_table.b)的结构。TopN数据如果是按照从大到小的顺序取,则取出原数据分组表排序字段值大于等于tmp_table表对应值b的记录,反之TopN数据按照从小到大的顺序取,则取出原数据分组表排序字段值小于等于tmp_table表对应值b的记录,得到的结果即为最终期望的topN数据结果。
进一步的,考虑到在某些应用场景中,去重数据分组内的数据项数目过少,其最终的组内序号小于TopN的N的对应值。这样,在对去重数据分组内的数据项执行筛选时就无法保存组内序号等于TopN的N的对应值的数据项。针对上述问题,在一实施例中,在筛选每个去重数据分组内的数据项的过程中,保留每个去重数据分组内的阈值数据项,其中,当最大的组内序号小于N时,阈值数据项为组内序号最大的数据项。
以表7、表8以及表9组成的数据分组组合为例。确定Top5数据。保留数据分组内组内序号等于5的数据项,得到表13、表14所示的结果。
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
5 |
c |
20 |
*** |
*** |
表13
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
5 |
b |
100 |
*** |
*** |
表14
表7中组内序号最大为4,小于5,保留组内序号最大(4)的数据项,如表15所示。
组内序号 |
商户ID |
交易金额 |
订单号 |
其他字段 |
4 |
a |
100 |
*** |
*** |
表15
进一步的,基于本发明的方法,本发明还提出了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现本发明所述的方法。
进一步的,基于本发明的方法,本发明还提出了一种用于在用户设备端信息处理的设备,该设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该设备执行本发明所述的方法。
进一步的,基于本发明的方法,本发明还提出了一种确定TopN数据的系统如图5所示,在一实施例中,系统包括:
分组模块510,其配置为根据数据项的名称标识对原数据执行分组操作,获得一个或多个原数据分组,其中,每个名称标识对应一个原数据分组;
去重模块520,其配置为针对每个原数据分组,根据数据项的排序字段执行去重操作,获得去重数据分组,其中,同一原数据分组内,排序字段的值相同的多个数据项只保留其中的一个数据项;
排序模块530,其配置为分别针对每个去重数据分组,基于排序字段的值对数据项执行组内排序操作;
数据项提取模块540,其配置为根据组内排序操作的操作结果,分别确定每个原数据分组中排序字段的值排在前N位的数据项,其中,N的值为TopN中N对应的值,N为自然数。
进一步的,如图6所示,在一实施例中,系统包括分组模块610、去重模块620、排序模块630以及数据项提取模块640。排序模块630配置为根据组内排序操作的结果为每个去重数据分组内的数据项生成对应的组内序号。
数据项提取模块640包括:
筛选单元641,其配置为保留每个去重数据分组内的阈值数据项,其中,阈值数据项为组内序号等于N的数据项;
确定单元642,其配置为其配置为确定数据项,其中,对比原数据分组内的数据项与对应的阈值数据项,确定原数据分组中排序字段的值排在前N位的数据项。
具体的,在一实施例中,确定单元642配置为:
当TopN的取值顺序为从小到大时,从原数据分组中确定排序字段的值小于等于阈值数据项的数据项;
当TopN的取值顺序为从大到小时,从原数据分组中确定排序字段的值大于等于阈值数据项的数据项。
进一步的,如图7所示,在一实施例中,系统包括分组模块710、去重模块720、排序模块730、临时表创建模块750以及数据项提取模块740,数据项提取模块740包括筛选单元741以及确定单元742。
分组模块710配置为基于数据项的名称标识执行数据分组,确定数据项对应的分组字段;
临时表创建模块750配置为生成临时数据项表,该临时数据项表包括分组字段以及排序字段;
排序模块730配置为对临时表创建模块750创建的临时数据项表中的数据项执行基于分组字段以及排序字段的分组排序,为每个数据项赋予对应的组内序号;
筛选单元741配置为对临时数据项表中的数据项执行过滤,保留组内序号等于N的数据项;
确定单元742配置为建立临时数据项表与原数据分组的关联,基于该关联对比原数据分组内的数据项与对应的阈值数据项,确定原数据分组中排序字段的值排在前N位的数据项。
进一步的,在本发明的系统中,对临时表创建模块的生成临时数据项表的过程不做严格限制。具体的,在一实施例中,临时表创建模块根据分组操作以及去重操作的结果生成临时数据项表。在一实施例中,临时表创建模块根据分组操作的结果生成临时数据项表,去重模块针对临时数据项表执行去重操作。在一实施例中,临时表创建模块根据原数据生成临时数据项表,分组模块针对临时数据项表执行分组操作,分组操作完成后,去重模块针对临时数据项表执行去重操作。
优选地,在一实施例中,临时表创建模块根据分组操作以及去重操作的结果生成临时数据项表。这样就可以尽可能降低临时数据项表的数据量,避免出现冗余数据处理操作。
具体的,如图7所示,在一实施例中,分组模块710配置为对原数据执行分组操作;去重模块720配置为针对每个数据分组内的数据项执行去重操作;临时表创建模块750配置为根据去重模块720的去重操作的结果生成临时数据项表。
进一步的,考虑到在某些应用场景中,数据分组内的数据项数目过少,其最终的组内序号小于TopN的N的对应值。这样,在对数据分组内的数据项执行筛选时就无法保存组内序号等于TopN的N的对应值的数据项。在一实施例中,筛选单元741还配置为,保留每个去重数据分组内的阈值数据项,其中,当最大的组内序号小于N时,阈值数据项为组内序号最大的数据项。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤执行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
应该理解的是,本发明所公开的实施例不限于这里所公开的特定结构、处理步骤或材料,而应当延伸到相关领域的普通技术人员所理解的这些特征的等同替代。还应当理解的是,在此使用的术语仅用于描述特定实施例的目的,而并不意味着限制。
说明书中提到的“一实施例”意指结合实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,说明书通篇各个地方出现的短语“一实施例”并不一定均指同一个实施例。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。