数据处理方法及装置与流程

文档序号:25304319发布日期:2021-06-04 14:08阅读:177来源:国知局
1.本发明总体说来涉及数据处理领域,更具体地说,涉及一种数据处理方法、装置及存储介质。
背景技术
::2.在数据处理领域,通常需要对数据进行特征计算,以从数据中抽取出能够表征特定含义的特征。以基于有序窗口的特征计算任务为例,针对每条数据,可以基于该条数据对应的有序窗口范围内数据进行特征计算。3.在执行特征计算任务,特别是基于有序窗口的特征计算任务,时,需要尽量避免数据倾斜现象的发生。数据倾斜是指大量数据被分配到一个计算节点上执行计算,使得这些数据的计算速度远低于平均计算速度,导致整个计算过程过慢。4.由于造成数据倾斜问题的原因各异,使得现有的数据倾斜优化方案实现起来较为繁琐,而优化方案所占资源(如时间资源)较多,反而会使优化方案失去存在的意义。5.因此,针对特征计算任务,特别是基于有序窗口的特征计算任务,需要一种数据处理方案,以解决可能存在的数据倾斜问题。技术实现要素:6.本发明的示例性实施例旨在克服特征计算任务,特别是基于有序窗口的特征计算任务,执行过程中可能存在的数据倾斜问题。7.根据本发明的第一个方面,提出了一种数据处理方法,包括:基于特征计算任务的解析结果,生成第一操作语句,所述第一操作语句用于对待处理的数据集进行统计;基于执行所述第一操作语句得到的统计结果,生成第二操作语句,所述第二操作语句用于对所述数据集中数据进行标记,数据的标记用于标识数据所在区块;基于执行所述第二操作语句得到的标记结果,生成第三操作语句,所述第三操作语句用于补充区块中缺少的依赖数据,所述依赖数据为区块中数据在进行特征计算时需要依赖但所述区块中不存在的数据;通过执行所述第三操作语句对所述数据集进行扩充,并将扩充后数据集中的数据划分到多个区块。8.可选地,所述解析结果包括所述特征计算任务针对的主键字段、有序字段以及窗口范围,所述统计结果包括所述数据集中一个或多个对应同一主键字段值且按照有序字段值排序的数据集合在预定数值分位点处数据的有序字段值,标记后的数据包括第一标记字段和第二标记字段,第二标记字段值等于第一标记字段值,有序字段值位于同一分位区间的数据的第一标记字段值相同,所述分位区间用于表征以相邻两个分位点对应的有序字段值为边界构成的有序字段值区间。9.可选地,所述第三操作语句用于针对所述数据集中分位点处数据的特征计算所依赖的窗口范围内与分位点处数据的第一标记字段值不同的原始数据,新增一条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块,其中,复制数据的第一标记字段值与分位点处数据的第一标记字段值相同,复制数据的第二标记字段值等于原始数据的第二标记字段值。10.可选地,所述第三操作语句用于针对所述数据集中的每条原始数据,新增多条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块,其中,所述多条复制数据的数量等于分位区间的数量减一,所述多条复制数据与原始数据所在分位区间之外的分位区间一一对应,复制数据的第二标记字段值不变,复制数据的第一标记字段值改为与该复制数据对应的分位区间内原始数据的第一标记字段值。11.可选地,所述第一标记字段值为整数值,整数值的大小等于数据所在分位区间之后的分位区间的数量加1,所述第三操作语句用于针对所述数据集中的每条原始数据,新增一条或多条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块,其中,所述一条或多条复制数据的数量等于原始数据的第一标记字段值减1,每条复制数据对应原始数据所在分位区间之后的一个分位区间,所述一条或多条复制数据的第一字段值与所述原始数据的第一字段值构成公差为1的等差数列,所述原始数据的第一字段值为等差数列中的第一项。12.可选地,所述数据集中主键字段值的数据量小于第一阈值的主键字段值所对应的所有数据的第一标记字段值为1。13.可选地,数据处理方法还包括:将所述多个区块分配给多个计算节点,所述计算节点用于对分配的区块中第一标记字段值和第二标记字段值相同的数据进行特征计算。14.可选地,基于特征计算任务的解析结果生成第一操作语句的步骤包括:基于特征计算任务的解析结果以及预先确定的优化等级,生成第一操作语句,其中,所述预定数值与所述优化等级正相关,以及/或者所述统计结果还包括所述数据集中各个主键字段值的数据量,基于执行所述第一操作语句得到的统计结果生成第二操作语句的步骤包括:基于执行所述第一操作语句得到的统计结果以及预先确定的第一阈值,生成第二操作语句,其中,所述第二操作语句用于将所述数据集中主键字段值的数据量小于所述第一阈值的主键字段值所对应的所有数据的第一标记字段值设为相同的字段值。15.可选地,数据处理方法还包括:基于外部输入确定所述优化等级和/或所述第一阈值。16.可选地,所述统计结果还包括各个主键字段值的数据量与所有主键字段值的总数据量的比值,所述第二操作语句用于将比值小于第二阈值的主键字段值所对应的所有数据的第一标记字段值设为相同的字段值,并将比值大于或等于第二阈值的主键字段值所对应的数据中位于不同分位区间的数据的第一标记字段值设为不同的字段值。17.可选地,所述第一操作语句和/或所述第二操作语句和/或所述第三操作语句为基于结构化查询语言编写的操作语句。18.可选地,数据处理方法还包括:获取用于描述特征计算任务的任务描述信息;通过对所述任务描述信息进行解析,得到所述解析结果。19.根据本发明的第二个方面,提出了一种数据处理装置,包括:第一生成模块,用于基于特征计算任务的解析结果,生成第一操作语句,所述第一操作语句用于对待处理的数据集进行统计;第二生成模块,用于基于执行所述第一操作语句得到的统计结果,生成第二操作语句,所述第二操作语句用于对所述数据集中数据进行标记,数据的标记用于标识数据所在区块;第三生成模块,用于基于执行所述第二操作语句得到的标记结果,生成第三操作语句,所述第三操作语句用于补充区块中缺少的依赖数据,所述依赖数据为区块中数据在进行特征计算时需要依赖但所述区块中不存在的数据;处理模块,用于通过执行所述第三操作语句对所述数据集进行扩充,并将扩充后数据集中的数据划分到多个区块。20.可选地,所述解析结果包括所述特征计算任务针对的主键字段、有序字段以及窗口范围,所述统计结果包括所述数据集中一个或多个对应同一主键字段值且按照有序字段值排序的数据集合在预定数值分位点处数据的有序字段值,标记后的数据包括第一标记字段和第二标记字段,第二标记字段值等于第一标记字段值,有序字段值位于同一分位区间的数据的第一标记字段值相同,所述分位区间用于表征以相邻两个分位点对应的有序字段值为边界构成的有序字段值区间。21.可选地,所述第三操作语句用于针对所述数据集中分位点处数据的特征计算所依赖的窗口范围内与分位点处数据的第一标记字段值不同的原始数据,新增一条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块,其中,复制数据的第一标记字段值与分位点处数据的第一标记字段值相同,复制数据的第二标记字段值等于原始数据的第二标记字段值。22.可选地,所述第三操作语句用于针对所述数据集中的每条原始数据,新增多条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块,其中,所述多条复制数据的数量等于分位区间的数量减一,所述多条复制数据与原始数据所在分位区间之外的分位区间一一对应,复制数据的第二标记字段值不变,复制数据的第一标记字段值改为与该复制数据对应的分位区间内原始数据的第一标记字段值。23.可选地,所述第一标记字段值为整数值,整数值的大小等于数据所在分位区间之后的分位区间的数量加1,所述第三操作语句用于针对所述数据集中的每条原始数据,新增一条或多条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块,其中,所述一条或多条复制数据的数量等于原始数据的第一标记字段值减1,每条复制数据对应原始数据所在分位区间之后的一个分位区间,所述一条或多条复制数据的第一字段值与所述原始数据的第一字段值构成公差为1的等差数列,所述原始数据的第一字段值为等差数列中的第一项。24.可选地,所述数据集中主键字段值的数据量小于第一阈值的主键字段值所对应的所有数据的第一标记字段值为1。25.可选地,数据处理装置还包括:分配模块,用于将所述多个区块分配给多个计算节点,所述计算节点用于对分配的区块中第一标记字段值和第二标记字段值相同的数据进行特征计算。26.可选地,所述第一生成模块基于特征计算任务的解析结果以及预先确定的优化等级,生成第一操作语句,其中,所述预定数值与所述优化等级正相关,以及/或者所述第二生成模块基于执行所述第一操作语句得到的统计结果以及预先确定的第一阈值,生成第二操作语句,其中,所述第二操作语句用于将所述数据集中主键字段值的数据量小于所述第一阈值的主键字段值所对应的所有数据的第一标记字段值设为相同的字段值。27.可选地,数据处理装置还包括:确定模块,用于基于外部输入确定所述优化等级和/或所述第一阈值。28.可选地,所述统计结果还包括各个主键字段值的数据量与所有主键字段值的总数据量的比值,所述第二操作语句用于将比值小于第二阈值的主键字段值所对应的所有数据的第一标记字段值设为相同的字段值,并将比值大于或等于第二阈值的主键字段值所对应的数据中位于不同分位区间的数据的第一标记字段值设为不同的字段值。29.可选地,所述第一操作语句和/或所述第二操作语句和/或所述第三操作语句为基于结构化查询语言编写的操作语句。30.可选地,数据处理装置还包括:获取模块,用于获取用于描述特征计算任务的任务描述信息;解析模块,用于通过对所述任务描述信息进行解析,得到所述解析结果。31.根据本发明的第三个方面,提出了一种包括至少一个计算装置和至少一个存储指令的存储装置的系统,其中,所述指令在被所述至少一个计算装置运行时,促使所述至少一个计算装置执行如本发明第一方面所述的方法。32.根据本发明的第四个方面,提出了一种存储指令的计算机可读存储介质,其中,当所述指令被至少一个计算装置运行时,促使所述至少一个计算装置执行如本发明第一方面所述的方法。33.在根据本发明示例性实施例的数据处理方法及装置中,通过基于特征计算任务的解析结果,依次生成并执行第一操作语句、第二操作语句以及第三操作语句,可以实现数据集中数据的自动分区,在解决执行特征计算任务时可能存在的数据倾斜问题的同时,可以保证分区内数据的计算逻辑的正确性。附图说明34.从下面结合附图对本发明实施例的详细描述中,本发明的这些和/或其他方面和优点将变得更加清楚并更容易理解,其中:35.图1示出了根据本发明示例性实施例的数据处理方法的流程图;36.图2示出了根据本发明示例性实施例的数据处理装置的结构框图。具体实施方式37.为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明的示例性实施例作进一步详细说明。38.基于窗口的特征计算任务,是指针对数据集中每条数据进行特征计算时,均需要依赖窗口范围内的其他数据。窗口用于表征针对每条数据进行特征计算时需要使用的数据集合。39.基于有序窗口的特征计算任务,是指针对数据集中每条数据进行特征计算时,均需要依赖一个有序窗口范围内的其他数据。有序窗口用于表征针对每条数据进行特征计算时需要使用的有序数据范围。有序窗口可以是但不限于时序窗口、数值有序窗口、字符串有序窗口等。其中,时序窗口用于表征对每条数据计算特征(即时序特征)需要的历史数据集合。数值有序窗口用于表征对每条数据计算特征需要的按照有序数值排序的数据集合。字符串有序窗口用于表征对每条数据计算特征需要的按照有序字符串排序的数据集合。40.不同于一般的特征计算任务,在执行基于有序窗口的特征计算任务时,产生数据倾斜问题的字段不仅可以是主键字段,还可以是时间字段或其他有序字段,使得仅根据主键字段进行分区的方案无法很好地应对基于有序窗口的特征计算任务所面临的数据倾斜问题。41.而在根据“主键字段值+时间范围(或其他有序字段范围)”进行数据分区时,在面对某个时间点或时间段(或其他有序字段值或字段值范围)内数据过于集中时,这种数据分区方案仍会导致数据倾斜问题。42.并且,在执行基于有序窗口的特征计算任务而对数据进行特征计算时,需要使用有序窗口范围内的有序数据集合,而这使得在数据分区时还需要考虑特征计算对计算所需数据的有序性要求。43.可见,上述方案均不能解决基于有序窗口的特征计算任务所面临的数据倾斜问题,而如果在上述方案的基础上进行改进,例如增加线程、在数据倾斜的字段前面添加前缀或后缀等,又需要结合基于有序窗口的特征计算任务的上述特点进行设计,使得工程落地时优化时间反而比计算时间更长。44.本发明通过总结上述方案的优缺点,并通过深入挖掘基于有序窗口的特征计算任务的通用规律,提出了一种兼顾计算资源和非计算过程的时间资源(可选地还可以同时兼顾内存资源)的数据处理方案(也即数据分区方案),以力求在二者(或三者)之间达到一个较佳平衡。45.图1示出了根据本发明示例性实施例的数据处理方法的流程图。图1所示的方法可完全通过计算机程序以软件方式实现,还可通过特定配置的计算装置来执行图1所示的方法。46.参见图1,在步骤s110,基于特征计算任务的解析结果,生成第一操作语句,第一操作语句用于对待处理的数据集进行统计。47.数据集包括多条数据,每条数据可以由一个或多个字段组成。数据集可以是由多条数据构成的数据表。48.特征计算任务可以是上文述及的基于序列窗口的特征计算任务。特征计算任务可以用于针对数据集中的每条数据计算一个或多个特征。例如,特征计算任务可以是但不限于“计算每个账号最近一个星期的消费总和以及每个账号最近一个星期的消费平均值”、“计算每个账号发生交易时其上一笔交易与该笔交易之和”等。其中,“最近一个星期”、“当前交易与上笔交易”即为用于表征特征计算需要使用的有序数据范围的序列窗口。49.本发明还可以获取用于描述特征计算任务的任务描述信息,通过对任务描述信息进行解析得到解析结果。其中,任务描述信息可以是基于能够被机器执行的语言编写的语句,如可以是基于结构化查询语言(sql)编写的sql语句。50.特征计算任务的解析结果可以包括但不限于特征计算任务针对的数据集中数据所包括的字段名(如下文述及的主键字段和有序字段)以及针对每条数据进行特征计算所依赖的数据范围(即下文述及的窗口范围)。51.生成第一操作语句的目的在于,通过执行第一操作语句得到有助于分区的指标的统计结果。考虑到特征计算任务(特别是基于有序窗口的特征计算任务)所面临的数据倾斜问题的复杂性,本发明提出,可以采用基于“主键字段值+分位点”的数据分区方式。52.主键字段是指特征计算任务涉及的字段中能够唯一标识数据的字段或字段组合。主键字段值也即主键字段所对应的字段值。以特征计算任务为“统计用户最近一个星期的消费情况”为例,主键字段可以是用户字段,主键字段值可以是但不限于用户名、用户id。53.分位点,也可称为分位数,是指将对应同一主键字段值的数据集合划分为若干等份的数值点。例如,二分位点包括一个用于划分为2个等份的数值点(即中位数),四分位点包括三个用于划分为4个等份的数值点。其中,不同主键字段值的数据集合可以被划分为相同等份的数值点。54.基于“主键字段值+分位点”的数据分区方式,是指可以将数据集中主键字段值相同且属于同一等份的数据划分到一个区块。由此,可以解决因某个时间点或时间段(或其他有序字段值或字段值范围)内数据过于集中而导致的数据倾斜问题。55.为了便于后续利用第二操作语句对数据所在区块进行标识,第一操作语句统计的指标可以包括数据集中对应同一主键字段值的按照有序字段值排序的数据集合在预定数值分位点处数据的有序字段值。有序字段值,是指能够用于对数据进行排序的有序字段所对应的字段值。有序字段可以是但不限于时间字段、数值字段或字符串字段。56.在步骤s120,基于执行第一操作语句得到的统计结果,生成第二操作语句,第二操作语句用于对数据集中数据进行标记,数据的标记用于标识数据所在区块。57.第二操作语句可以配置为根据数据集中数据的主键字段值以及有序字段值,确定数据所处的分位区间,并据此确定该数据的标记。其中,主键字段值相同且位于同一分位区间的数据的标记相同。分位区间用于表征以相邻两个分位点对应的有序字段值为边界构成的字段值区间。58.数据的标记可以作为数据的新增字段的字段值。即,可以通过执行第二操作语句为数据集中每条数据新增一个字段,该字段的字段值即为用于标识数据所在区块的标记。59.通过将第二操作语句配置为将主键字段值相同且位于同一分位区间的数据的标记设为相同,使得后续基于主键字段值和标记划分数据所处区块时,不同区块中需要计算的数据量不会相差太大,从而能够解决可能存在的数据倾斜问题。60.在步骤s130,基于执行第二操作语句得到的标记结果,生成第三操作语句,第三操作语句用于补充区块中缺少的依赖数据,依赖数据为区块中数据在进行特征计算时需要依赖但区块中不存在的数据。61.在针对数据集中某条数据进行特征计算时,通常还需要使用该条数据附近一条或多条其他数据。仅基于“主键字段值+分位点”的数据分区方式,并不能保证分区内数据的计算逻辑的正确性。例如,在针对某个区块中位于边界位置附近的数据进行特征计算时,该区块中可能缺乏特征计算需要使用的部分数据。62.为此,本发明提出,可以基于执行第二操作语句得到的标记结果生成第三操作语句,利用第三操作语句补充区块中缺少的依赖数据,以保证区块内数据的计算逻辑的正确性。63.在步骤s140,通过执行第三操作语句对数据集进行扩充,并将扩充后数据集中的数据划分到多个区块。64.执行第三操作语句对数据集进行扩充的过程,也即在数据集中扩充依赖数据,并将依赖数据的标记设置为缺乏该依赖数据的区块所对应的标记,以使得在基于数据的主键字段值和标记将扩充后的数据集中数据划分到多个区块后,各个区块中不再缺乏特征计算所需的数据。65.在将扩充后数据集中的数据划分到多个区块后,本发明还可以将这多个区块分配给多个计算节点,由计算节点对分配到的区块中的数据进行特征计算。其中,计算节点在针对区块中的数据进行特征计算时,可以忽略补充到该区块的依赖数据(即下文述及的复制数据)的计算。66.本发明述及的第一操作语句和/或第二操作语句和/或第三操作语句,可以是基于能够被机器执行的语言编写的,如可以是基于结构化查询语言(sql)编写的操作语句。67.本发明通过基于特征计算任务的解析结果,依次生成并执行第一操作语句、第二操作语句以及第三操作语句,可以实现自动对数据集中数据进行分区,在解决执行特征计算任务时可能存在的数据倾斜问题的同时,可以保证分区内数据的计算逻辑的正确性。68.下面以基于有序窗口的特征计算任务为例,就本发明的数据处理方法涉及的细节做进一步说明。69.针对基于有序窗口的特征计算任务,特征计算任务的解析结果可以包括特征计算任务针对的主键字段、有序字段以及窗口范围。70.有序字段,是指有序窗口定义窗口范围内数据时所依据的字段。有序字段可以包括但不限于时间字段、数值字段或字符串字段。例如,“最近一个星期”、“最近一个月”等窗口范围所对应的有序字段为时间字段。再例如,“比该条数据的某个字段值大的5条数据”这一窗口范围所对应的有序字段为数值有序字段。71.第一操作语句可以配置为对数据集中对应同一主键字段值的按照有序字段值排序的数据集合在预定数值分位点处数据的有序字段值进行统计。由此,统计结果可以包括数据集中对应同一主键字段值的按照有序字段值排序的数据集合在预定数值分位点处数据的有序字段值。72.以预定数值分位点为四分位点为例,统计结果可以包括数据集中对应同一主键字段值的按照有序字段值排序的数据集合分别在四分之一位置处的数据的有序字段值、四分之二置处的数据的有序字段值以及四分之三位置处的数据的有序字段值。可选地,统计结果还可以包括数据集合首尾两端位置处的有序字段值。73.通过统计数据集中对应同一主键字段值的按照有序字段值排序的数据集合在预定数值分位点处数据的有序字段值,使得后续生成并执行第二操作语句,以将数据集中主键字段值相同且位于同一分位区间的数据的标记设置为相同时,可以至少保证后续基于数据的主键字段值和标记进行分区得到的每个区块内大部分数据的计算逻辑不会出错。即,区块内数据是按照有序字段值排列的,因此每个区块内大部分数据的特征计算所需要的窗口范围内数据均落在该区块内。在此基础上,通过生成并执行第三操作语句可以进一步补足区块内数据进行特征计算时缺失的依赖数据,进而可以保证区块内所有数据的计算逻辑不会出错。74.第二操作语句可以配置为针对数据集中每条数据(即原始数据)设置两个标记字段,这两个标记字段可以称为第一标记字段和第二标记字段。第二标记字段值等于第一标记字段值。第一标记字段值用于标识数据所在区块,对应于同一主键字段值的按照有序字段值排序的数据集合中有序字段值位于同一分位区间的数据的第一标记字段值相同。第二字段值用于计算节点后续判断该数据是需要进行特征计算的原始数据,还是添加到区块中的复制数据。由此,标记后的数据包括第一标记字段和第二标记字段。75.第三操作语句在对数据集进行扩充时以补充区块中缺少的依赖数据时,针对数据集中原本不属于某个区块但需要添加到该区块中的原始数据,可以复制一条新数据,复制得到的新数据可以称为复制数据,与原始数据相比,复制数据的第二标记字段值不变,第一标记字段值改为复制数据需要添加到的区块所对应的第一标记字段值,即该区块内的原始数据的第一标记字段值。76.由此,原始数据的第一标记字段值和第二标记字段值相同,复制数据的第一标记字段值和第二标记字段值不同。在将多个区块分配给多个计算节点,由计算节点对分配的区块中数据进行特征计算时,计算节点可以遍历每条数据,判断该条数据的第一字段值和第二字段值是否相同,若相同则针对该条数据进行特征计算,若不同则不计算。即,计算节点可以仅对区块中第一标记字段值和第二标记字段值相同的数据进行特征计算。77.出于降低性能损耗的考虑,第三操作语句可以配置为仅针对区块中边界位置处的数据进行扩容。即,第三操作语句可以配置为针对数据集中位于分位点处的数据进行扩容。具体地,第三操作语句可以用于针对数据集中分位点处数据的特征计算所依赖的窗口范围内与分位点处数据的第一标记字段值不同的原始数据,新增一条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块,其中,复制数据的第一标记字段值与分位点处数据的第一标记字段值相同,复制数据的第二标记字段值等于原始数据的第二标记字段值。78.出于非计算过程的时间资源考虑,针对对应同一主键字段值的所有区块中的每个区块,第三操作语句可以直接将其余各区块中数据均作为复制数据添加到该区块。具体地,第三操作语句用于针对数据集中的每条原始数据,新增多条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块,其中,多条复制数据的数量等于分位区间的数量减一,多条复制数据与原始数据所在分位区间之外的分位区间一一对应,复制数据的第二标记字段值不变,复制数据的第一标记字段值改为与该复制数据对应的分位区间内原始数据的第一标记字段值。分位区间的数量,是指对应同一主键字段值且按照有序字段值排序的数据集合被预定数值分位点划分得到的分位区间数量,以预定数值分位点为四分位点为例,分位区间的数量等于4。79.本发明还可以预先设定一个优化阈值(为了便于区分,可以称为第一阈值),第一操作语句还可以用于对数据集中各个主键字段值的数据量进行统计,第二操作语句可以用于仅对数据集中主键字段值的数据量大于或等于第一阈值的主键字段值所对应的数据,进行分区处理。至于数据集中主键字段值的数据量小于第一阈值的主键字段值所对应的数据,则可以将其第一标记字段值设为同一数值。即,数据集中主键字段值的数据量小于第一阈值的主键字段值所对应的所有数据可以被划分到一个区块。80.由此,在执行步骤s120时,可以基于执行第一操作语句得到的统计结果以及预先确定的第一阈值,生成第二操作语句,其中,第二操作语句用于将数据集中主键字段值的数据量小于第一阈值的主键字段值所对应的所有数据的第一标记字段值设为相同的字段值。81.作为示例,第一标记字段值可以为整数值,整数值的大小等于数据所在分位区间之后的分位区间的数量加1,第三操作语句用于针对数据集中的每条原始数据,新增一条或多条复制数据,并将主键字段值相同且第一标记字段值也相同的数据划分到同一区块。其中,一条或多条复制数据的数量等于原始数据的第一标记字段值减1,每条复制数据对应原始数据所在分位区间之后的一个分位区间,一条或多条复制数据的第一字段值与原始数据的第一字段值构成公差为1的等差数列,原始数据的第一字段值为等差数列中的第一项。由此,可以在降低非计算过程的时间资源的同时降低内存资源。可选地,数据集中主键字段值的数据量小于第一阈值的主键字段值所对应的所有数据的第一标记字段值为1。82.根据上文可知,本发明述及的预定数值分位点用于数据分区,预定数值分位点中预定数值的大小与分区数量正相关,而分区数量又可以在一定程度上反映优化效果。因此,预定数值可以是根据优化等级确定的数值,其中,预定数值与优化等级正相关,即优化等级越高,预定数值越大。83.优化等级,也可以称为数据倾斜等级,可以用于表征在数据倾斜场景下期望优化的程度。其中,可以基于外部输入确定优化等级。外部输入可以是指用户输入,即可以根据用户输入的优化等级确定预定数值。84.用户可以根据特征计算任务的具体应用场景和执行特征计算任务的实际资源,选择优化等级,等级越高优化程度越好,相应对内存资源的要求也就越多。可以以2为底数、优化等级为指数确定预定数值。例如,如果优化等级为2,那么预定数值分位点为4分位点;如果优化等级为4,那么预定数值分位点为16分位点,优化等级范围一般在2‑8之间。85.由此,在执行步骤s110时,可以基于特征计算任务的解析结果以及预先确定的优化等级,生成第一操作语句。86.需要说明的是,本发明的数据处理方法不仅可以解决特征计算任务面临的数据倾斜问题,还可以解决特征计算任务针对的数据集中对数据量过大而导致数据处理过慢的问题。即,本发明可以无需进行数据倾斜判断,即可解决特征计算任务(特别是基于时序窗口的特征计算任务)面临的数据倾斜问题。87.作为可选实施例,本发明也可以进行数据倾斜判断,判断数据集中是否存在数据倾斜,在判定存在数据倾斜时再执行本发明的数据处理方法。作为示例,统计结果还可以包括各个主键字段值的数据量与所有主键字段值的总数据量的比值,第二操作语句可以用于将比值小于第二阈值的主键字段值所对应的所有数据的第一标记字段值设为相同的字段值,并将比值大于或等于第二阈值的主键字段值所对应的数据中位于不同分位区间的数据的第一标记字段值设为不同的字段值。88.下面针对基于时序窗口的特征计算场景,结合具体实施例对本发明做进一步说明。89.以基于时序窗口的特征计算任务为例,在很多机器学习场景中都需要用到时序窗口挖掘大数据中的历史信息,然后计算出时序特征,如此可以提高算法效果,从而带来业务上收入的提升。90.例如,可以用sql语言描述如下一个时序场景:91.select92.instancekeyasinstancekey_1,93.count(`mcuid`)overip_windowascnt_mcuid,94.count(`rank`)overip_windowascnt_rank95.from96.`behaviourtable`97.windowip_windowas(partitionby`ip`orderby`eventtime`rowsbetween100precedingand0preceding);98.该sql对应于上文述及的任务描述信息,用于计算三个时序特征。时序特征的计算过程主要是根据ip字段划分区、eventtime字段排序操作后,用窗口大小100开始计算每个时序特征的值。99.可以看出,基于时序窗口的特征计算任务主要是根据输入表的主键列和时间列定义一个窗口类型,主键列用来分区,时间列用来排序;根据用户场景定义一个窗口的大小,比如0~100条大小范围或者0~100天时间范围的窗口;最后在窗口的基础上计算特征,比如count、avg、sum等等。100.从时序窗口场景来看,主键列和时间列均可能出现数据倾斜。比如,从上面的sql语句来看,ip字段可能出现数据倾斜,比如某网站有1个亿的访问量,其中有9千万来自广东省,另外1千万来自江西省,那么在计算的时候,9千万的那份数据计算时间要远远大于1千万那份数据。这个时候就会出现机器资源闲置和空等。仍从上面的sql语句来看,eventtime字段也可能出现倾斜。比如双11当天的访问量可能要大于10月份一整个月的访问量,这个时候窗口在计算双11那天的数据会异常的慢,需要用高效的算法有效的利用分布式集群专门计算双11,而不是只用一台机器计算,造成其他机器空闲,导致资源浪费。101.现有技术方案都不能有效地解决时序窗口中的数据倾斜问题。102.主要难点在于:增加线程个数和扩容,无法从根本上解决问题,因为时序窗口内数据是有序的,需要保证多线程有序,实现难度过大。简单的扩容,数据倾斜依然存在没有提高计算效率,反而带来工程上资源成本的麻烦;在数据倾斜的字段前面添加前缀或者后缀,时序窗口要求有序性,添加后缀前缀会破坏有序性,导致整个特征计算失真,模型效果差,业务收入降低。按时间范围做分桶处理,只能适用某些特定的场景,面对双11、双12,推荐等某个时间段数据过于集中,依然会出现大的数据倾斜问题,导致计算能力可能会降低;优化时间大于计算时间,很多方案在工程上实现的时候,会带来新的数据倾斜问题,或者带来许多shuffle,排序等操作,这样优化时间反而比计算时间更长,与其这样,不如不优化为好。103.针对时序窗口中的数据倾斜问题,本发明提供的数据处理方案如下所述。104.1、获取用户输入的阈值、优化等级105.阈值用于表征需要进行优化的数据的最低数据量,即主键字段值对应的数据量在多少条以上才需要进行优化。其中,阈值也可以不由用户输入,而可以是系统默认的一个数值,如10万条。106.优化等级,也即数据倾斜等级。用户也可以根据自己的场景和实际资源选择等级,等级越高优化程度越好,相应的内存资源要求也越多。该等级将会以2为底的指数级别对数据集做分片,比如等级为2,那么1个分片就会拆成4个分片,等级为4,1个分片就会拆成16个分片。一般建议选择2~8之间的值即可。107.2、输入sql脚本,启动程序,程序开始自动解析脚本108.sql脚本对应于上文述及的任务描述信息。sql脚本可以如下所示:109.select110.instancekeyasinstancekey_1,111.count(`mcuid`)overip_windowascnt_mcuid,112.count(`rank`)overip_windowascnt_rank113.from114.`behaviourtable`windowip_windowas(partitionby`ip`orderby`eventtime`rowsbetween100precedingand0preceding);115.3、获取解析结果并自动生成统计sql116.解析结果可以包括窗口名ip_window、主键列ip、时间列eventtime、窗口大小0~100条。117.统计sql对应于上文述及的第一操作语句。统计sql可以表示如下:118.select119.`ip`,120.count(`ip`)askey_cnt_4paradigm,121.min(`eventtime`)asmin_eventtime,122.max(`eventtime`)asmax_eventtime,123.percentile_approx(`eventtime`,0.0)aspercentile_0,124.percentile_approx(`eventtime`,0.25)aspercentile_1,125.percentile_approx(`eventtime`,0.5)aspercentile_2,126.percentile_approx(`eventtime`,0.75)aspercentile_3,127.percentile_approx(`eventtime`,1)aspercentile_4128.from129.`fesql_temp_window_1609581688797`groupby`ip`;130.统计sql中的key_cnt_4paradigm用来统计主键列ip中每个值(即主键字段值)有多少条;percentile_0~percentile_4用来统计第0,1,2,3,4分位的时间值是多少。其中,此处述及的第0分位是指某个ip对应的数据集合中时间最早的数据的时间值,第4分位是指某个ip对应的数据集合中时间最晚的数据的时间值,第1分位是指某个ip对应的数据集合中四分之一位置处数据的时间值,第2分位是指某个ip对应的数据集合中四分之二位置处数据的时间值,第3分位是指某个ip对应的数据集合中四分之三位置处数据的时间值。131.例如,假设统计结果为10万条数据中第1分位值是2020‑11‑11。那么这个意思就是:按照时间顺序第25000条的值是2020‑11‑11。显然0~25000条之间肯定是小于2020‑11‑11,25001~100000条肯定是大于等于2020‑11‑11132.执行统计sql产出的部分统计结果如下表所示:[0133][0134]4、基于统计sql得到的统计结果可以称为报告表,报告表可以被用来给分析场景做优化,本发明可以基于报告表自动生成标记sql。[0135]标记sql对应于上文述及的第二操作语句。标记sql可以表示如下:[0136]select[0137]main.`itemid`,main.`reqid`,main.`tags`,main.`instancekey`,main.`eventtime`,main.`rank`,main.`mcuid`,main.`ip`,[0138]case[0139]when`report`.`key_cnt_4paradigm`<10then1[0140]when`main`.`eventtime`<=percentile_0then4[0141]when`main`.`eventtime`>percentile_0and`main`.`eventtime`<=percentile_1then4[0142]when`main`.`eventtime`>percentile_1and`main`.`eventtime`<=percentile_2then3[0143]when`main`.`eventtime`>percentile_2and`main`.`eventtime`<=percentile_3then2[0144]when`main`.`eventtime`>percentile_3and`main`.`eventtime`<=percentile_4then1[0145]endastag_4paradigm[0146],[0147]case[0148]when`report`.`key_cnt_4paradigm`<10then1[0149]when`main`.`eventtime`<=percentile_0then4[0150]when`main`.`eventtime`>percentile_0and`main`.`eventtime`<=percentile_1then4[0151]when`main`.`eventtime`>percentile_1and`main`.`eventtime`<=percentile_2then3[0152]when`main`.`eventtime`>percentile_2and`main`.`eventtime`<=percentile_3then2[0153]when`main`.`eventtime`>percentile_3and`main`.`eventtime`<=percentile_4then1[0154]endasposition_4paradigm[0155]from`main`leftjoin`report`on`main`.`ip`=`report`.`ip`;[0156]其中,main是基于时序窗口的特征计算场景中的主表。report是基于统计sql得到的报告表。tag_4paradigm对应于上文述及的第一标记字段。position_4paradigm对应于上文述及的第二标记字段。tag_4paradigm和position_4paradigm两个字段值是一样,但是在未来作用是不一样的。[0157]tag_4paradigm在数据扩容的时候,会根据上面的数值扩容相应的条数,比如tag_4paradigm=4,那么未来这条数据就会扩容成标记为tag_4paradigm=1、tag_4paradigm=2、tag_4paradigm=3、tag_4paradigm=4,总共4条数据。扩容过程中position_4paradigm的字段值保持不变,即position_4paradigm会一直记录着原始数据在原来数据集的位置保持不变。在计算时序特征时,只有当tag_4paradigm=position_4paradigm的数据才会做计算,而tag_4paradigm与position_4paradigm不相等的数据,则作为历史数据(对应于上文述及的复制数据)对待,直接放到窗口里面,不做计算。[0158]这里有个内存优化逻辑,key_cnt_4paradigm小于10(万条)的,默认不做数据倾斜优化,不需要扩容,也就是之前优化设置的阈值,这样只需要针对数据倾斜的主键字段做数据扩容,其余数据不需要扩容。[0159]基于标记sql标记后的部分数据如下面表格所示:[0160][0161]5、基于标记sql得到的标记结果,如上述标记表,本发明会开始计算窗口的上下界,生成最优的扩容sql。[0162]扩容sql对应于上文述及的第三操作语句。扩容sql可以表示如下:[0163]select*fromtag_main[0164]union[0165]selecttag_main.`itemid`,tag_main.`reqid`,...,1as`tag_4paradigm`,tag_main.`position_4paradigm`fromtag_main[0166]where[0167]`position_4paradigm`=2or`position_4paradigm`=3or`position_4paradigm`=4[0168]union[0169]selecttag_main.`itemid`,tag_main.`reqid`,...,2as`tag_4paradigm`,tag_main.`position_4paradigm`fromtag_main[0170]where[0171]`position_4paradigm`=3or`position_4paradigm`=4[0172]union[0173]selecttag_main.`itemid`,tag_main.`reqid`,...,3as`tag_4paradigm`,tag_main.`position_4paradigm`fromtag_main[0174]where[0175]`position_4paradigm`=4;[0176]可以看到,随着优化等级越高,union的个数也就越大,带来多余性能损耗。可以通过数学公式,计算出最优sql以降低性能损耗。例如,假设阈值设置10万,窗口大小是100,这里可以找到最小窗口下界,10万/100=1000,意思是10万条可以容纳1000个大小为100的窗口,1000的数量要远远大于优化等级2,那么扩容sql会被优化成如下,只有两个select,性能损耗大大降低。[0177]select*fromtag_main[0178]union[0179]select…`tag_4paradigm`‑1,`position_4paradigm`fromtag_main[0180]基于扩容sql扩容后的部分数据如下表所示:[0181][0182]6、扩容sql的结果,就是本发明最终得到的优化结果[0183]扩容后可以将主键字段值相同且tag_4paradigm字段值也相同的数据划分到同一区块。[0184]由此,本发明通过将tag_4paradigm字段作为分组字段与ip字段结合,可以解决数据倾斜问题,并且时序窗口计算的数据都是正确的。而在计算时序特征的时候,只有position_4paradigm=tag_4paradigm的一行数据才会做计算,这样可以确保计算逻辑的正确性。[0185]综上,本发明通过总结各种技术方案的优缺点和挖掘通用性场景的规律,提出用统计工具和数学公式的计算,来达到用一个支点撬动地球的效果。[0186]整个技术方案可以概括为:自动解析sql中的窗口,并提取出主键列,时间列和窗口范围;根据解析的结果,自动生成优化sql语句,统计sql,标记sql和扩容sql,其中统计和数学计算优化都包含在sql里面;数据集在计算之前,按顺序执行sql,此时拿到的数据集就是数据倾斜优化后的结果;新的数据集增加了两个字段tag_4paradigm和position_4paradigm,根据tag_4paradigm和主键列可以做分片,tag_4paradigm字段的值充分考虑了时间的有序性和再分片的特性,可以完美解决数据倾斜问题。[0187]本发明的数据处理方案至少存在如下优势:[0188]1、优化时间要远远小于计算时间,借助于spark平台执行sql,能对算法做最大的优化;[0189]2、工程化落地极其容易,只需要将开发精力放到数学计算和自动生成sql语句的优化上,就能有效避开工程代码带来新的数据倾斜问题;[0190]3、在处理任意场景的数据中,本发明具备通用性和显著的性能提升效果,主要原因是本发明和传统方案最大的不同就是会对数据集做稠密度分析,越稠密的数据集,划分就越细,越稀疏的数据集,划分就越粗。因此做到通用性;[0191]4、在实现本方案中发现任意场景的性能效果,除了数据倾斜会有影响外,还有冗余编解码,窗口上下界,内存拷贝等都会对性能有不小的影响。如果在设计方案中,能把这些因素也考虑进去,就能做到端到端的极致优化,例如分段式窗口,通过阈值和窗口的大小计算,不需要遍历整个表的数据,就可以获取窗口的上下界大致范围,不仅大大减少内存消耗,而且能明显的提高计算速度;[0192]5、窗口缓存,在不需要计算的数据中加缓存,可以减少多余的编解码和无用的内存拷贝,只对有效窗口做真正的计算。[0193]本发明的数据处理还可以实现为一种数据处理装置。图2示出了根据本发明示例性实施例的数据处理装置的结构框图。其中,数据处理装置的功能单元可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图2所描述的功能单元可以组合起来或者划分成子单元,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能单元的任何可能的组合、或者划分、或者更进一步的限定。[0194]下面就数据处理装置可以具有的功能单元以及各功能单元可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。[0195]参见图2,数据处理装置200包括第一生成模块210、第二生成模块220、第三生成模块230以及处理模块240。[0196]第一生成模块210用于基于特征计算任务的解析结果,生成第一操作语句,第一操作语句用于对待处理的数据集进行统计。第二生成模块220用于基于执行第一操作语句得到的统计结果,生成第二操作语句,第二操作语句用于对数据集中数据进行标记,数据的标记用于标识数据所在区块。第三生成模块230用于基于执行第二操作语句得到的标记结果,生成第三操作语句,第三操作语句用于补充区块中缺少的依赖数据,依赖数据为区块中数据在进行特征计算时需要依赖但区块中不存在的数据。处理模块240用于通过执行第三操作语句对数据集进行扩充,并将扩充后数据集中的数据划分到多个区块。[0197]作为示例,处理模块240还可以依次执行第一操作语句、第二操作语句以及第三操作语句。具体地,第一生成模块210生成第一操作语句后,处理模块240可以执行第一操作语句,第二生成模块220可以基于处理模块240执行第一操作语句得到的统计结果,生成第二操作语句,然后处理模块240可以执行第二操作语句,第三生成模块220可以基于处理模块240执行第二操作语句得到的标记结果生成第三操作语句。第三生成模块可以执行第三操作语句对数据集进行扩充,并将扩充后数据集中的数据划分到多个区块。[0198]数据处理装置200还可以包括分配模块。分配模块用于将多个区块分配给多个计算节点,计算节点用于对分配的区块中第一标记字段值和第二标记字段值相同的数据进行特征计算。[0199]数据处理装置200还可以包括确定模块。确定模块用于基于外部输入确定优化等级和/或第一阈值。[0200]数据处理装置200还可以包括获取模块和解析模块。获取模块用于获取用于描述特征计算任务的任务描述信息;解析模块用于通过对任务描述信息进行解析,得到解析结果。[0201]应该理解,根据本发明示例性实施例的数据处理装置200的具体实现方式可参照结合图1描述的相关具体实现方式来实现,在此不再赘述。[0202]以上参照图1、图2描述了根据本发明示例性实施例的数据处理方法、数据处理方法。应理解,上述方法可通过记录在计算可读介质上的程序来实现,例如,根据本发明的示例性实施例,可提供一种存储指令的计算机可读存储介质,其中,在所述计算机可读介质上记录有用于执行图1示出的数据处理方法的计算机程序。[0203]上述计算机可读介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,应注意,所述计算机程序除了可用于执行除了图1示出的步骤之外,还可用于执行除了上述步骤以外的附加步骤或者在执行上述步骤时执行更为具体的处理,这些附加步骤和进一步处理的内容已经参照图1进行了描述,这里为了避免重复将不再进行赘述。[0204]应注意,根据本发明示例性实施例的数据处理装置,可完全依赖计算机程序的运行来实现相应的功能,即,各个装置与计算机程序的功能架构中与各步骤相应,使得整个系统通过专门的软件包(例如,lib库)而被调用,以实现相应的功能。[0205]另一方面,图2所示的各个装置也可以通过硬件、软件、固件、中间件、微代码或其任意组合来实现。当以软件、固件、中间件或微代码实现时,用于执行相应操作的程序代码或者代码段可以存储在诸如存储介质的计算机可读介质中,使得处理器可通过读取并运行相应的程序代码或者代码段来执行相应的操作。[0206]例如,本发明的示例性实施例还可以实现为计算装置,该计算装置包括存储部件和处理器,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行本发明述及的数据处理方法。[0207]具体说来,所述计算装置可以部署在服务器或客户端中,也可以部署在分布式网络环境中的节点装置上。此外,所述计算装置可以是pc计算机、平板装置、个人数字助理、智能手机、web应用或其他能够执行上述指令集合的装置。[0208]这里,所述计算装置并非必须是单个的计算装置,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。计算装置还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子装置。[0209]在所述计算装置中,处理器可包括中央处理器(cpu)、图形处理器(gpu)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。[0210]根据本发明示例性实施例的数据处理方法中所描述的某些操作可通过软件方式来实现,某些操作可通过硬件方式来实现,此外,还可通过软硬件结合的方式来实现这些操作。[0211]处理器可运行存储在存储部件之一中的指令或代码,其中,所述存储部件还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,所述网络接口装置可采用任何已知的传输协议。[0212]存储部件可与处理器集成为一体,例如,将ram或闪存布置在集成电路微处理器等之内。此外,存储部件可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储部件和处理器可在操作上进行耦合,或者可例如通过i/o端口、网络连接等互相通信,使得处理器能够读取存储在存储部件中的文件。[0213]此外,所述计算装置还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。计算装置的所有组件可经由总线和/或网络而彼此连接。[0214]根据本发明示例性实施例的数据处理方法所涉及的操作可被描述为各种互联或耦合的功能块或功能示图。然而,这些功能块或功能示图可被均等地集成为单个的逻辑装置或按照非确切的边界进行操作。[0215]例如,如上所述,根据本发明示例性实施例的数据处理装置可包括存储部件和处理器,其中,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行上文述及的数据处理方法。[0216]以上描述了本发明的各示例性实施例,应理解,上述描述仅是示例性的,并非穷尽性的,本发明不限于所披露的各示例性实施例。在不偏离本发明的范围和精神的情况下,对于本
技术领域
:的普通技术人员来说许多修改和变更都是显而易见的。因此,本发明的保护范围应该以权利要求的范围为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1