跨多数据表的数据处理方法、装置、介质和计算设备转让专利

申请号 : CN201710866877.2

文献号 : CN108268586B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李光明

申请人 : 阿里巴巴(中国)有限公司

摘要 :

本申请提供一种跨多数据表的数据处理方法、装置、介质和计算设备。所述方法包括:获取多个第一数据表;将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,所述子数据表的每一行包括所述对象标识和所述对象标识所标识的对象的一个特征数据,所述第一数据表对应的子数据表构成第二数据表;以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表。本申请提供的上述方法根据实际业务需求转换角度,以特征数据为立足点,在不引入冗余数据的情况下将多个数据表中的对象进行关联,可以分布到多个Reducer中执行,具有较高的数据处理能力和数据处理效率,可以高效地胜任大数据处理。

权利要求 :

1.一种跨多数据表的数据处理方法,其特征在于,包括:

获取多个第一数据表,所述多个第一数据表中的每个第一数据表的每一行包括对象标识和所述对象标识所标识的对象的多个特征数据;

将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,所述子数据表的每一行包括所述对象标识和所述对象标识所标识的对象的一个特征数据,所述第一数据表对应的子数据表构成第二数据表;

以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表,其中,所述目标数据表中的每一行包括一个特征数据,以及所述特征数据对应的至少一个对象标识。

2.根据权利要求1所述的方法,其特征在于,所述将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,包括:根据所述第一数据表的每一行包括的多个特征数据,将所述第一数据表的每一行拆分成包括多行的子数据表,所述子数据表的行数与所述多个特征数据的个数相同。

3.根据权利要求1所述的方法,其特征在于,所述以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表,包括:从每个第一数据表对应的第二数据表中选择一个第二数据表作为主表,将剩余的第二数据表作为从表,以每个所述第二数据表中的特征数据为连接键,将所述从表左连接至所述主表,得到目标数据表。

4.根据权利要求1所述的方法,其特征在于,所述方法,还包括:

以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系。

5.根据权利要求4所述的方法,其特征在于,所述确定来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,包括:确定所述目标数据表中多个对象标识所标识的对象之间具有的相同特征数据的数量,所述多个对象标识分别来自于多个不同的所述第一数据表。

6.根据权利要求4所述的方法,其特征在于,所述确定来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,包括:确定所述目标数据表中与目标特征数据对应的来自于不同的所述第一数据表的数据标识所标识的对象;或者确定所述目标数据表中与目标对象对应有相同特征数据的其他对象的对象标识。

7.根据权利要求4-6任一项所述的方法,其特征在于,所述以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,包括:获取目标任务,所述目标任务包括:确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系;

根据所述目标任务,将所述目标数据表以所述特征数据为主键映射为多个规约任务,通过分布式运算所述多个规约任务完成所述目标任务。

8.一种跨多数据表的数据处理装置,其特征在于,包括:

获取模块,用于获取多个第一数据表,所述多个第一数据表中的每个第一数据表的每一行包括对象标识和所述对象标识所标识的对象的多个特征数据;

转换模块,用于将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,所述子数据表的每一行包括所述对象标识和所述对象标识所标识的对象的一个特征数据,所述第一数据表对应的子数据表构成第二数据表;

连接模块,用于以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表,其中,所述目标数据表中的每一行包括一个特征数据,以及所述特征数据对应的至少一个对象标识。

9.根据权利要求8所述的装置,其特征在于,所述转换模块包括:

数据表拆分单元,用于根据所述第一数据表的每一行包括的多个特征数据,将所述第一数据表的每一行拆分成包括多行的子数据表,所述子数据表的行数与所述多个特征数据的个数相同。

10.根据权利要求8所述的装置,其特征在于,所述连接模块包括:

左连接单元,用于从每个第一数据表对应的第二数据表中选择一个第二数据表作为主表,将剩余的第二数据表作为从表,以每个所述第二数据表中的特征数据为连接键,将所述从表左连接至所述主表,得到目标数据表。

11.根据权利要求8所述的装置,其特征在于,所述装置,还包括:

关联关系确定模块,用于以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系。

12.根据权利要求11所述的装置,其特征在于,所述关联关系确定模块包括:同特征数量确定单元,用于确定所述目标数据表中多个对象标识所标识的对象之间具有的相同特征数据的数量,所述多个对象标识分别来自于多个不同的所述第一数据表。

13.根据权利要求11所述的装置,其特征在于,所述关联关系确定模块包括:目标特征关联查询单元,用于确定所述目标数据表中与目标特征数据对应的来自于不同的所述第一数据表的数据标识所标识的对象;或者目标对象关联查询单元,用于确定所述目标数据表中与目标对象对应有相同特征数据的其他对象的对象标识。

14.根据权利要求11-13任一项所述的装置,其特征在于,所述关联关系确定模块包括:任务获取单元,用于获取目标任务,所述目标任务包括:确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系;

任务运行单元,用于根据所述目标任务,将所述目标数据表以所述特征数据为主键映射为多个规约任务,通过分布式运算所述多个规约任务完成所述目标任务。

15.一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,其特征在于,所述计算机程序在被处理器运行时执行权利要求1-7任一项所述的跨多数据表的数据处理方法。

16.一种计算设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序时执行权利要求1-7任一项所述的跨多数据表的数据处理方法。

说明书 :

跨多数据表的数据处理方法、装置、介质和计算设备

技术领域

[0001] 本申请涉及数据处理技术领域,尤其涉及一种跨多数据表的数据处理方法、装置、介质和计算设备。

背景技术

[0002] 随着互联网及大数据技术的快速发展,数据挖掘分析对于人类活动的影响日益显著,通过大数据可以进行对象之间的相关性分析,确定不同对象之间的内在关联关系,进而通过兴趣推荐等方式提高用户生活质量,例如,通过分析用户共同阅读过的文章,可以确定用户之间的相关性,进而向具有相同兴趣的用户进行文章推荐,提高用户体验。
[0003] 在进行相关性分析或推荐时,往往需要跨多个数据表分析用户之间的相关性,目前常用的方法是,将多个数据表通过笛卡尔积合并为一个数据表后再通过映射规约(MapReduce)进行分析。但实际应用中,随着数据量越来越大,基于笛卡尔积对海量数据表进行操作效率越来越低,比如,统计两组用户两两之间阅读过的相同文章的数量,按照上述方法,需要将两组用户对应的数据表进行笛卡尔积操作后再通过Reducer(执行规约任务的任务机)进行分析。但是,由于笛卡尔积没有连接键,只能使用一个Reducer完成分析任务,在数据量较大时,受单一Reducer处理能力制约,容易造成Reducer的任务执行结果不正确,甚至任务无法执行完成的情况。
[0004] 针对上述问题,目前有两种解决方案:
[0005] 一种解决方案是:如果要进行笛卡尔积操作的两个表中,有一个是小表(数据量远小于另一个表),可以将这张小表的数据加载到内存中,从而加速笛卡尔积的处理速度。但是这种解决方案的一个重要限制就是:受内存容量制约,必须要存在一张规模远小于另一张表的数据表才会生效。因此,该解决方案显然难以胜任大数据表的处理。
[0006] 另一种解决方案是:额外构造join key(连接键),通过表连接操作代替笛卡尔积操作,具体做法是将小表扩充一列join key,并将小表的条目复制数倍,且join key各不相同;将大表扩充一列join key为小表扩充数倍之后数据总量范围内的随机数。例如,假设小表中只有1条数据,大表中1000条数据,给小表添加一列join key,设其值为1,将该数据扩充四倍,其join key的值分别为2~5,大表中的join key,使用1~5之间的随机数,比如有200个1,200个2,200个3,200个4和200个5,此时,根据join key进行两个表的连接操作时,就会产生5个reducer,同时将大表的数据随机分成了5份(小表扩展后的倍数),从而解决了上述问题。但是,该解决方案的的本质仍然与笛卡尔积操作相同,其弊端是会造成数据的冗余,且实际执行起来比较繁琐、效率低下。
[0007] 综上,目前迫切需要一种能够胜任大数据处理的、高效的跨多数据表的数据处理方法。

发明内容

[0008] 本申请提供一种跨多数据表的数据处理方法、装置、介质和计算设备,以高效地对大数据进行处理。
[0009] 一方面,本申请提供一种跨多数据表的数据处理方法,包括:
[0010] 获取多个第一数据表,所述多个第一数据表中的每个第一数据表的每一行包括对象标识和所述对象标识所标识的对象的多个特征数据;
[0011] 将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,所述子数据表的每一行包括所述对象标识和所述对象标识所标识的对象的一个特征数据,所述第一数据表对应的子数据表构成第二数据表;
[0012] 以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表,其中,所述目标数据表中的每一行包括一个特征数据,以及所述特征数据对应的至少一个对象标识。
[0013] 在一些可行的实施方式中,所述将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,包括:
[0014] 根据所述第一数据表的每一行包括的多个特征数据,将所述第一数据表的每一行拆分成包括多行的子数据表,所述子数据表的行数与所述多个特征数据的个数相同。
[0015] 在一些可行的实施方式中,所述以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表,包括:
[0016] 从每个第一数据表对应的第二数据表中选择一个第二数据表作为主表,将剩余的第二数据表作为从表,以每个所述第二数据表中的特征数据为连接键,将所述从表左连接至所述主表,得到目标数据表。
[0017] 在一些可行的实施方式中,所述方法,还包括:
[0018] 以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系。
[0019] 在一些可行的实施方式中,所述确定来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,包括:
[0020] 确定所述目标数据表中多个对象标识所标识的对象之间具有的相同特征数据的数量,所述多个对象标识分别来自于多个不同的所述第一数据表。
[0021] 在一些可行的实施方式中,所述确定来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,包括:
[0022] 确定所述目标数据表中与目标特征数据对应的来自于不同的所述第一数据表的数据标识所标识的对象;或者
[0023] 确定所述目标数据表中与目标对象对应有相同特征数据的其他对象的对象标识。
[0024] 在一些可行的实施方式中,所述以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,包括:
[0025] 获取目标任务,所述目标任务包括:确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系;
[0026] 根据所述目标任务,将所述目标数据表以所述特征数据为主键映射为多个规约任务,通过分布式运算所述多个规约任务完成所述目标任务。
[0027] 另一方面,本申请提供一种跨多数据表的数据处理装置,包括:
[0028] 获取模块,用于获取多个第一数据表,所述多个第一数据表中的每个第一数据表的每一行包括对象标识和所述对象标识所标识的对象的多个特征数据;
[0029] 转换模块,用于将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,所述子数据表的每一行包括所述对象标识和所述对象标识所标识的对象的一个特征数据,所述第一数据表对应的子数据表构成第二数据表;
[0030] 连接模块,用于以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表,其中,所述目标数据表中的每一行包括一个特征数据,以及所述特征数据对应的至少一个对象标识。
[0031] 在一些可行的实施方式中,所述转换模块,包括:
[0032] 数据表拆分单元,用于根据所述第一数据表的每一行包括的多个特征数据,将所述第一数据表的每一行拆分成包括多行的子数据表,所述子数据表的行数与所述多个特征数据的个数相同。
[0033] 在一些可行的实施方式中,所述连接模块,包括:
[0034] 左连接单元,用于从每个第一数据表对应的第二数据表中选择一个第二数据表作为主表,将剩余的第二数据表作为从表,以每个所述第二数据表中的特征数据为连接键,将所述从表左连接至所述主表,得到目标数据表。
[0035] 在一些可行的实施方式中,所述装置,还包括:
[0036] 关联关系确定模块,用于以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系。
[0037] 在一些可行的实施方式中,所述关联关系确定模块,包括:
[0038] 同特征数量确定单元,用于确定所述目标数据表中多个对象标识所标识的对象之间具有的相同特征数据的数量,所述多个对象标识分别来自于多个不同的所述第一数据表。
[0039] 在一些可行的实施方式中,所述关联关系确定模块,包括:
[0040] 目标特征关联查询单元,用于确定所述目标数据表中与目标特征数据对应的来自于不同的所述第一数据表的数据标识所标识的对象;或者
[0041] 目标对象关联查询单元,用于确定所述目标数据表中与目标对象对应有相同特征数据的其他对象的对象标识。
[0042] 在一些可行的实施方式中,所述关联关系确定模块,包括:
[0043] 任务获取单元,用于获取目标任务,所述目标任务包括:确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系;
[0044] 任务运行单元,用于根据所述目标任务,将所述目标数据表以所述特征数据为主键映射为多个规约任务,通过分布式运算所述多个规约任务完成所述目标任务。
[0045] 又一方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序在被处理器运行时执行本申请提供的跨多数据表的数据处理方法。
[0046] 再一方面,本申请提供一种计算设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行本申请提供的跨多数据表的数据处理方法。
[0047] 本申请提供的跨多数据表的数据处理方法、装置、介质和计算设备,通过将每个第一数据表的每一行拆分为子数据表,从而得到对象标识与特征数据一一对应的多个第二数据表,然后以第二数据表中的特征数据为连接键,将多个第二数据表进行表连接,从而得到以特征数据为线索将来自于不同的第一数据表中的对象标识整合、关联在一起的目标数据表,基于该目标数据表,即可以特征数据为立足点确定来自于不同的第一数据表的对象标识所标识的对象之间的关联关系,以便于进一步的数据分析。相较于现有技术,摒弃了传统的以对象为立足点、运用笛卡尔积或者引入新连接键等冗余数据的数据处理方法,而创新性地根据实际业务需求,转换角度,以特征数据为立足点,通过行拆分、表连接等方式,在不引入冗余数据的情况下,将多个数据表中的对象进行关联,且生成的目标数据表由于具有连接键,因此可以分布到多个Reducer中执行,从而具有较高的数据处理能力和数据处理效率。基于上述说明,本申请提供的跨多数据表的数据处理方法、装置、介质和计算设备可以高效地胜任大数据处理。

附图说明

[0048] 图1为本申请实施例提供的一种跨多数据表的数据处理方法的流程图;
[0049] 图2为本申请实施例提供的一种跨多数据表的数据处理装置的结构框图;
[0050] 图3为本申请实施例提供的一种计算机可读存储介质的示意图;
[0051] 图4为本申请实施例提供的一种典型的计算设备的示意图。

具体实施方式

[0052] 下面将结合附图对本申请技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本申请的技术方案,因此只是作为示例,而不能以此来限制本申请的保护范围。
[0053] 需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本申请所属领域技术人员所理解的通常意义。
[0054] 另外,术语“第一”和“第二”是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0055] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0056] 以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
[0057] 数据表:也称数据库表,简称表,是存储于数据库中的表,是数据库最重要的组成部分之一,数据表中存储有按照行列分布的数据。
[0058] 对象:是指客观世界中存在的人、事、物体等实体,例如,用户、产品等都可以称为对象。
[0059] 对象标识:是指在数据表中表示对象的标识数据,如用户名、用户ID(英文全称:identification,中文名称:唯一性身份标识)、产品代码等。
[0060] 特征数据:是指用来描述对象某一或某些特性的数据,如对于用户而言,身高、兴趣爱好、曾经做过的事情、与其相关的事物都可以视为特征数据。
[0061] 表连接:是指将多个数据表横向连接为一个新数据表的操作,可以分为等值连接和非等值连接,其中,等值连接是指各数据表中有相同的字段,将该字段中的数据作为连接键,通过比较连接键的键值,将键值相等的行的数据进行连接的操作;非等值连接是指不对数据进行比较而直接进行连接的操作。
[0062] 左连接:是等值连接的一种方式,具体操作方法是:从多个数据表中选择一个作为主表,剩余数据表作为从表,将主表放到最左边,从表在主表右侧进行等值连接。
[0063] 笛卡尔积:又称直积,在数据库处理中,是指将多个数据表中的行逐一连接以生成新数据表的操作,属于非等值连接,笛卡尔积获得的新数据表的行数是原数据表行数的乘积。
[0064] “多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
[0065] 下面结合附图对本申请的实施例进行描述。
[0066] 图1为本申请实施例提供的一种跨多数据表的数据处理方法的流程图。如图1所示,所述跨多数据表的数据处理方法,包括以下步骤:
[0067] 步骤S101:获取多个第一数据表,所述多个第一数据表中的每个第一数据表的每一行包括对象标识和所述对象标识所标识的对象的多个特征数据。
[0068] 其中,第一数据表的每一行数据,描述了一个对象的对象标识与该对象的多个特征数据之间的对应关系,所述多个特征数据可以是在同一列中采用分隔符进行分隔,也可以是位于不同的列中。
[0069] 步骤S102:将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,所述子数据表的每一行包括所述对象标识和所述对象标识所标识的对象的一个特征数据,所述第一数据表对应的子数据表构成第二数据表。
[0070] 在第一数据表的每一行中,对象标识与特征数据之间是一对多的对应关系,本步骤S102通过对所述第一数据表进行处理,使得处理后的第二数据表的每一行中,对象标识与特征数据之间是一对一的对应关系。
[0071] 其中,在将第一数据表的每一行转换为一个子数据表时,可以是根据所述第一数据表的每一行包括的多个特征数据,将所述第一数据表的每一行拆分成包括多行的子数据表,所述子数据表的行数与所述多个特征数据的个数相同。拆分后的各子数据表按照对应的第一数据表中的行的顺序排列,构成第二数据表。
[0072] 本步骤S102在具体实施时,可以通过数据表的行列转换方法将第一数据表的每一行转换为一个子数据表,例如,在Hive(Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行)中,可以采用explode函数将位于行A中的多个特征数据拆分到多行中,同时利用lateral view函数将该行A中的对象标识复制到拆分后的每一行中与各特征数据一一对应,得到子数据表。
[0073] 需要说明的是,不同的行列转换算法对待处理的第一数据表的要求可能不同,因此,有可能需要根据采用的行列转换算法的要求对所述第一数据表进行预处理后,再根据所述行列转换算法进行处理,例如,上述explode函数要求待处理的第一数据表中,每一行的多个特征数据以数组形式存储于同一个单元格中,因此,若所述第一数据表初始状态下,每一行的多个特征数据位于不同的单元格中,则需要通过预处理,将其合并到同一个单元格中并以数组形式存储;又若每一行的多个特征数据虽然存储于同一单元格中但并非以数组形式存储,则需要通过预处理将其转换为数组形式存储。
[0074] 步骤S103:以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表,其中,所述目标数据表中的每一行包括一个特征数据,以及所述特征数据对应的至少一个对象标识。
[0075] 通过步骤S102生成的第二数据表,相较于原第一数据表,每一行只有一个特征数据,因此,可以以特征数据为连接键将多个第二数据表进行等值连接,得到目标数据表,该目标数据表中,每一行包括一个特征数据,以及与该特征数据对应的至少一个对象标识,所述对象标识来自于不同的第一数据表。
[0076] 容易理解的是,上述目标数据表以特征数据为线索和立足点将来自于不同的第一数据表中的对象标识整合、关联在一起,各对象标识之间的关联关系更加清楚,基于该目标数据表,可以更加容易的分析各对象之间的相关性问题。
[0077] 考虑到在实际应用中,不一定所有的特征数据在各个第一数据表中都有记录,例如,有3个第一数据表,特征数据A可能只在其中一个第一数据表中有记录,那么利用该特征数据A得不到来自不同的第一数据表的对象标识所标识的对象之间的相关性,因此,根据实际需求,在上述步骤S101-S103的执行过程中,还可以对该类特征数据进行过滤,例如:在本申请第一实施例任一实施方式的基础上,所述步骤S103可以包括:从每个第一数据表对应的第二数据表中选择一个第二数据表作为主表,将剩余的第二数据表作为从表,以每个所述第二数据表中的特征数据为连接键,将所述从表左连接至所述主表,得到目标数据表。该实施方式中,由于采用左连接的方式进行表连接,因此,只有主表中的特征数据及其对应的对象标识才会被保存到目标数据表中,从而能够过滤掉一部分主表中没有记录而只有在从表中记录的特征数据及其对应的对象标识,一方面可以避免非必要特征数据对进一步分析的干扰,另一方面精简了目标数据表的数据量,有利于提高整体数据处理效率。
[0078] 本申请实施例提供的上述跨多数据表的数据处理方法,通过将每个第一数据表的每一行拆分为子数据表,从而得到对象标识与特征数据一一对应的多个第二数据表,然后以第二数据表中的特征数据为连接键,将多个第二数据表进行表连接,从而得到以特征数据为线索将来自于不同的第一数据表中的对象标识整合、关联在一起的目标数据表,基于该目标数据表,即可以特征数据为立足点确定来自于不同的第一数据表的对象标识所标识的对象之间的关联关系,以便于进一步的数据分析。相较于现有技术,摒弃了传统的以对象为立足点,运用笛卡尔积或者引入新连接键等冗余数据的数据处理方法,而创新性地根据实际业务需求,转换角度,以特征数据为立足点,通过行拆分、表连接等方式,在不引入冗余数据的情况下,将多个数据表中的对象进行关联,且生成的目标数据表由于具有连接键,因此可以分布到多个Reducer中执行,从而具有较高的数据处理能力和数据处理效率。基于上述说明,本申请实施例提供的跨多数据表的数据处理方法可以高效地胜任大数据处理。
[0079] 如前所述,步骤S103得到的目标数据表以特征数据为线索和立足点将来自于不同的第一数据表中的对象标识整合、关联在一起,各对象标识之间的关联关系更加清楚,基于该目标数据表,可以更加容易地分析各对象之间的相关性问题。因此,在图1所示实施例的基础上,所述跨多数据表的数据处理方法,还可以包括:以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系。所述关联关系包括以特征数据为媒介确定的对象之间的相关性统计结果,可以用数量来表示,也可以用列表、文字等形式来表示,本申请实施例并不限定其具体形式。
[0080] 相应的,所述确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,可以包括确定所述目标数据表中多个对象标识所标识的对象之间具有的相同特征数据的数量,所述多个对象标识分别来自于多个不同的所述第一数据表。比如确定两组用户中两两用户之间阅读过的相同文章的数量。
[0081] 又如,所述确定来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,还可以包括:确定所述目标数据表中与目标特征数据对应的来自于不同的所述第一数据表的数据标识所标识的对象;或者确定所述目标数据表中与目标对象对应有相同特征数据的其他对象的对象标识。比如在两组用户中找出阅读过相同的文章的用户,或者找出与用户A阅读过相同文章的其他用户列表。
[0082] 由于所述目标数据表是通过连接键进行等值连接得到的数据表,因此,可以使用MapReduce通过分布式运算进行数据分析,在本申请实施例任一实施方式的基础上,所述以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系,可以包括:
[0083] 获取目标任务,所述目标任务包括:确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系;
[0084] 根据所述目标任务,将所述目标数据表以所述特征数据为主键映射为多个规约任务,通过分布式运算所述多个规约任务完成所述目标任务。
[0085] 本实施方式通过分布式运算可以有效提高数据处理效率,并可以避免单一任务处理机运算大数据时由于运算量溢出而中止的问题。
[0086] 接下来,在图1所示实施例的基础上,以实际相关性问题结合具体示例对本申请提供的跨多数据表的数据处理方法进行说明如下:
[0087] 现实生活中,有许多相关性分析需求,例如,内容发布商通过分析用户之间共同的兴趣或爱好,可以向关联用户推荐彼此喜欢的文章、视频等内容;又如,交友网站通过分析用户之间共同的兴趣或爱好,可以向用户A推荐具有相同兴趣爱好的用户B为潜在好友;诸如此类。
[0088] 针对相关性分析需求,提出了大量相关性问题,例如:统计两组用户,两两之间阅读过的相同文章的数量。本实施例二以此进行说明。
[0089] 现有技术中,一方面,进行相关性分析的常用方法是:将多个数据表通过笛卡尔积合并为一个数据表后再通过映射规约(MapReduce)进行分析;另一方面,Hive由于可以很好的支持MapReduce以进行分布式运算,成为目前业界进行大数据分析的重要工具。但是,由于笛卡尔积是非等值连接,而非等值连接非常难转化到MapReduce任务执行,且Hive对笛卡尔积操作的支持较弱,在没有连接键的情况下,Hive只能使用1个Reducer来完成任务,实际应用中即使通过设置hive.mapreduce.tasks来改变Reducer的数量也是无效的,当数据量较大时,使用1个Reducer进行处理,一方面效率非常低、另一方面,可能会由于运算量超负荷、运算超时等原因导致Reducer中止任务,使分析任务无法完成,因此,现有基于笛卡尔积的相关性分析方法难以适用于大数据。
[0090] 以统计两组用户,两两之间阅读过的相同文章的数量为例,设两组用户分别存在两个数据表seed_user和all_user中,该两个数据表的都包括字段user_id,item_ids,其中字段user_id中存储的是用户的唯一标识(即对象标识),字段item_ids中存储的是用户阅读过的文章ID的列表(即特征数据),item_ids是string类型的数据,多个文章ID之间以逗号分隔。
[0091] 为了便于理解,以下表1和表2分别给出了数据表seed_user和all_user的示例,其中,表1和表2中每一行数据分别记载了user_id和item_ids的对应关系:
[0092] 表1
[0093] user_id item_idsA1 C1,C3,C5
A2 C2,C4,C5
A3 C3,C6,C7
[0094] 表2
[0095] user_id item_idsB1 C1,C2,C6
B2 C3,C4,C7
B3 C1,C3,C4
[0096] 采用基于笛卡尔积的相关性分析方法,处理过程如下:
[0097] 1、从数据表seed_user中提取user_id、item_ids和item_ids中文章ID的数量length1,生成数据表t1;
[0098] 2、从数据表all_user中提取user_id、item_ids和item_ids中文章ID的数量length2,生成数据表t2;
[0099] 3、将数据表t1和数据表t2进行笛卡尔积,得到笛卡尔积表,该笛卡尔积表如以下表3所示:
[0100] 表3
[0101] seed_user_id seed_item_ids length1 all_user_id all_item_ids length2A1 C1,C3,C5 3 B1 C1,C2,C6 3A1 C1,C3,C5 3 B2 C3,C4,C7 3
A1 C1,C3,C5 3 B3 C1,C3,C4 3
A2 C2,C4,C5 3 B1 C1,C2,C6 3
A2 C2,C4,C5 3 B2 C3,C4,C7 3
A2 C2,C4,C5 3 B3 C1,C3,C4 3
A3 C3,C6,C7 3 B1 C1,C2,C6 3
A3 C3,C6,C7 3 B2 C3,C4,C7 3
A3 C3,C6,C7 3 B3 C1,C3,C4 3
[0102] 4、从笛卡尔积表中提取seed_user_id、all_user_id、seed_item_ids与all_item_ids去重后的合集a_item_ids、length1和length2,生成数据表a,所述数据表a如以下表4所示:
[0103] 表4
[0104] seed_user_id all_user_id a_item_ids length1 length2A1 B1 C1,C2,C3,C5,C6 3 3
A1 B2 C1,C3,C4,C5,C7 3 3
A1 B3 C1,C3,C4,C5 3 3
A2 B1 C1,C2,C4,C5,C6 3 3
A2 B2 C2,C3,C4,C5,C7 3 3
A2 B3 C1,C2,C3,C4,C5 3 3
A3 B1 C1,C2,C3,C6,C7 3 3
A3 B2 C3,C4,C6,C7 3 3
A3 B3 C1,C3,C4,C6,C7 3 3
[0105] 5、从数据表a中提取seed_user_id、all_user_id、a_item_ids中文章ID的数量length、length1和length2,生成数据表t,所述数据表t如以下表5所示:
[0106] 表5
[0107] seed_user_id all_user_id length length1 length2A1 B1 5 3 3
A1 B2 5 3 3
A1 B3 4 3 3
A2 B1 5 3 3
A2 B2 5 3 3
A2 B3 5 3 3
A3 B1 5 3 3
A3 B2 4 3 3
A3 B3 5 3 3
[0108] 6、从表t中提取seed_user_id、all_user_id、length1+length2–length三个字段的数据,并进行分组,得到seed_user_id和all_user_id两两之间阅读过的相同文章的数量length1+length2–length,如以下表6所示:
[0109] 表6
[0110] seed_user_id all_user_id length1+length2–lengthA1 B1 1
A1 B2 1
A1 B3 2
A2 B1 1
A2 B2 1
A2 B3 1
A3 B1 1
A3 B2 2
A3 B3 1
[0111] 在Hive中可以参照以下执行语句执行:
[0112]
[0113]
[0114] 需要说明的是,以上执行语句与上述示例并非完全一致,本领域技术人员可以参照上述执行语句实施。
[0115] 根据以上对基于笛卡尔积的相关性分析方法的示例性说明,可见,一方面,处理过程中会引入length1、length2、length等冗余数据,这无疑会加重处理机的运算负荷、降低运算效率;另一方面,笛卡尔积生成的表数据量也很大,尤其是对于大数据的处理,产生的笛卡尔积表的数据量将会大到难以处理,且由于笛卡尔积是非等值连接,难以通过MapReduce进行分布式运算,因此,综上所述,该种解决方案效率低且难以胜任大数据的相关性分析。
[0116] 而采用本申请实施例提供的方法,处理过程如下:
[0117] 1、数据表seed_user和all_user为第一数据表,将数据表seed_user和all_user分别根据item_ids进行拆分,得到相应的第二数据表t1和t2,所述第二数据表t1和t2分别如以下表7、表8所示:
[0118] 表7
[0119]seed_user_id item_ids
A1 C1
A1 C3
A1 C5
A2 C2
A2 C4
A2 C5
A3 C3
A3 C6
A3 C7
[0120] 表8
[0121] all_user_id item_idsB1 C1
B1 C2
B1 C6
B2 C3
B2 C4
B2 C7
B3 C1
B3 C3
B3 C4
[0122] 2、以字段item_ids为连接键,将第二数据表t1和t2进行左连接,得到目标数据表a,所述目标数据表a如以下表9所示:
[0123] 表9
[0124] item_ids seed_user_id all_user_idC1 A1 B1
C1 A1 B3
C2 A2 B1
C3 A1 B2
C3 A1 B3
C3 A3 B2
C3 A3 B3
C4 A2 B2
C4 A2 B3
C5 A1  
C5 A2  
C6 A3 B1
C7 A3 B2
[0125] 3、以seed_user_id和all_user_id均相同为条件对item_ids进行计数,得到seed_user_id和all_user_id两两之间阅读过的相同文章的数量count_num,如以下表10所示:
[0126] 表10
[0127]seed_user_id all_user_id count_num
A1 B1 1
A1 B2 1
A1 B3 2
A2 B1 1
A2 B2 1
A2 B3 1
A3 B1 1
A3 B2 2
A3 B3 1
[0128] 在Hive中可以参照以下执行语句执行:
[0129]
[0130]
[0131] 需要说明的是,以上执行语句与上述示例并非完全一致,其中还涉及对第一数据表的预处理等过程,如通过split(item_ids,',')函数,将item_ids字段转换为数组形式,便于使用explode函数进行行列转换;又如,通过left outer join,where等函数过滤掉一些不必要的item_id(seed_user表中的用户没有阅读过的文章,不予考虑),加速任务执行的效率,等等。本领域技术人员可以参照上述执行语句实施。
[0132] 另外,需要说明的是,上述处理过程可能会带来的一个问题是可能产生数据倾斜问题,也就是热门的文章会被很多人看到,这个问题可以通过过滤热门文章的方法解决,比如在上述示例中,过滤掉阅读受众超过一定数量的item_id,或者受众top-k的item_id,通过删除极少量的item_id,不会影响最终获得可信的统计结果,即不会对相关性分析结果产生较大影响。
[0133] 根据上述示例性说明,可见,本申请实施例提供的上述方法的技术构思之一在于:当需要根据字段A进行笛卡尔积操作,处理字段B时,转化成针对字段B的连接操作。基于该构思,一方面,本申请实施例提供的上述方法,不需要引入额外的冗余数据,可以避免现有技术引入冗余数据导致的增加运算负荷、降低运算效率的问题;另一方面,本申请实施例巧妙的转换了解决问题的角度,以文章ID(即特征数据)而非用户ID为立足点分析两组用户之间的相关性问题,使得整个数据处理过程步骤更加简单、数据处理量更小,从而可有效提高数据处理效率;此外,本申请实施例中,采用了item_ids作为连接键进行等值连接,因此,具体实施时可以采用MapReduce进行分布式运算,不再受单一处理机运算能力和效率的影响,可以高效地胜任大数据的相关性分析。
[0134] 容易理解的是,上述处理过程中产生的目标数据表a,列出了seed_user_id、all_user_id和item_ids的关联关系明细,根据该目标数据表,除了可以统计两两之间阅读过的相同文章的数量,还可以进行其他相关性分析,例如,找出与用户A1阅读过相同文章C1的用户B1和B3,或者找出同时阅读过文章C2的用户A2和B1,等等,因此,通过本申请实施例得到的目标数据表,可以用于进行更多项目的相关性分析,用途更广。
[0135] 图2为本申请实施例提供的一种跨多数据表的数据处理装置的结构框图。本实施例提供的跨多数据表的数据处理装置与上述实施例提供的跨多数据表的数据处理方法出于相同的发明构思,因此,部分内容不再赘述,请参考上述实施例进行理解。
[0136] 如图2所示,,本申请实施例提供的一种跨多数据表的数据处理装置2,包括:
[0137] 获取模块21,用于获取多个第一数据表,所述多个第一数据表中的每个第一数据表的每一行包括对象标识和所述对象标识所标识的对象的多个特征数据;
[0138] 转换模块22,用于将多个第一数据表中每个第一数据表的每一行转换为一个子数据表,所述子数据表的每一行包括所述对象标识和所述对象标识所标识的对象的一个特征数据,所述第一数据表对应的子数据表构成第二数据表;
[0139] 连接模块23,用于以第二数据表中的特征数据为连接键,对每个第一数据表对应的第二数据表进行表连接,得到目标数据表,其中,所述目标数据表中的每一行包括一个特征数据,以及所述特征数据对应的至少一个对象标识。
[0140] 可选的,在本申请实施例任一实施方式的基础上,所述转换模块22,包括:
[0141] 数据表拆分单元,用于根据所述第一数据表的每一行包括的多个特征数据,将所述第一数据表的每一行拆分成包括多行的子数据表,所述子数据表的行数与所述多个特征数据的个数相同。
[0142] 考虑到在实际应用中,不一定所有的特征数据在各个第一数据表中都有记录,例如,有3个第一数据表,特征数据A可能只在其中一个第一数据表中有记录,那么利用该特征数据A得不到来自不同的第一数据表的对象标识所标识的对象之间的相关性,因此,根据实际需求,还可以对该类特征数据进行过滤,在本申请实施例任一实施方式的基础上,所述连接模块23,包括:
[0143] 左连接单元,用于从每个第一数据表对应的第二数据表中选择一个第二数据表作为主表,将剩余的第二数据表作为从表,以每个所述第二数据表中的特征数据为连接键,将所述从表左连接至所述主表,得到目标数据表。
[0144] 该实施方式中,由于采用左连接的方式进行表连接,因此,只有主表中的特征数据及其对应的对象标识才会被保存到目标数据表中,从而能够过滤掉一部分主表中没有记录而只有在从表中记录的特征数据及其对应的对象标识,一方面可以避免非必要特征数据对进一步分析的干扰,另一方面精简了目标数据表的数据量,有利于提高整体数据处理效率。
[0145] 所述连接模块23输出的目标数据表以特征数据为线索和立足点将来自于不同的第一数据表中的对象标识整合、关联在一起,各对象标识之间的关联关系更加清楚,基于该目标数据表,可以更加容易地分析各对象之间的相关性问题,在本申请实施例任一实施方式的基础上,所述装置,还包括:
[0146] 关联关系确定模块,用于以所述目标数据表中的特征数据为依据,确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系。
[0147] 其中,在本申请实施例任一实施方式的基础上,所述关联关系确定模块,包括:
[0148] 同特征数量确定单元,用于确定所述目标数据表中多个对象标识所标识的对象之间具有的相同特征数据的数量,所述多个对象标识分别来自于多个不同的所述第一数据表。
[0149] 可选的,在本申请实施例任一实施方式的基础上,所述关联关系确定模块,还可以包括:
[0150] 目标特征关联查询单元,用于确定所述目标数据表中与目标特征数据对应的来自于不同的所述第一数据表的数据标识所标识的对象;或者
[0151] 目标对象关联查询单元,用于确定所述目标数据表中与目标对象对应有相同特征数据的其他对象的对象标识。
[0152] 由于所述目标数据表是通过连接键进行等值连接得到的数据表,因此,可以使用MapReduce通过分布式运算进行数据分析,在本申请实施例任一实施方式的基础上,所述关联关系确定模块,包括:
[0153] 任务获取单元,用于获取目标任务,所述目标任务包括:确定所述目标数据表中来自于不同的第一数据表中的对象标识所标识的对象之间的关联关系;
[0154] 任务运行单元,用于根据所述目标任务,将所述目标数据表以所述特征数据为主键映射为多个规约任务,通过分布式运算所述多个规约任务完成所述目标任务。
[0155] 基于上述实施方式,通过分布式运算可以有效提高数据处理效率,可以避免单一任务处理机运算大数据时由于运算量溢出而中止的问题。
[0156] 本申请实施例提供的跨多数据表的数据处理装置与本申请实施例提供的跨多数据表的数据处理方法出于相同的发明构思,具有相同的有益效果。
[0157] 图3为本申请实施例提供的一种计算机可读存储介质的示意图。如图3所示,所述计算机可读存储介质3内存储有计算机程序,所述计算机程序在被处理器运行时可以实现本申请提供的所述跨多数据表的数据处理方法。
[0158] 其中,所述计算机可读存储介质3包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
[0159] 本申请实施例提供的计算机可读存储介质与本申请实施例提供的跨多数据表的数据处理方法出于相同的发明构思,具有相同的有益效果。
[0160] 图4为本申请实施例提供的一种计算设备的示意图。如图4所示,所述计算设备4包括:处理器40,存储器41,总线42和通信接口43,所述处理器40、通信接口43和存储器41通过总线42连接;所述存储器41中存储有可在所述处理器40上运行的计算机程序,所述处理器40运行所述计算机程序时执行本申请提供的跨多数据表的数据处理方法。
[0161] 其中,存储器41可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口43(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。
[0162] 总线42可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器41用于存储程序,所述处理器40在接收到执行指令后,执行所述程序,前述本申请实施例任一实施方式揭示的所述跨多数据表的数据处理方法可以应用于处理器40中,或者由处理器40实现。
[0163] 处理器40可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器40中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器40可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器41,处理器40读取存储器41中的信息,结合其硬件完成上述方法的步骤。
[0164] 本申请实施例提供的计算设备与本申请实施例提供的跨多数据表的数据处理方法出于相同的发明构思,具有相同的有益效果。
[0165] 需要说明的是,附图中的流程图和框图显示了根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0166] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0167] 在本申请所提供的几个实施例中,应该理解到,所揭露的计算设备、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0168] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0169] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0170] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器104(ROM,Read-Only Memory)、随机存取存储器104(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0171] 最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围,其均应涵盖在本申请的权利要求和说明书的范围当中。