使用映射归约计算叉积的制作方法

文档序号:27483044发布日期:2021-11-19 23:55阅读:147来源:国知局
使用映射归约计算叉积的制作方法

1.本公开涉及数据处理系统领域,尤其涉及使用映射归约框架计算叉积。


背景技术:

2.大规模数据处理包括从一个或多个数据集中的原始数据中提取感兴趣的数据并将原始数据处理成有用的数据产品。并行和分布式处理环境中的大规模数据处理通常包括在多个磁盘和处理设备之间分配数据和计算,以有效利用聚合存储空间和计算能力。
附图说明
3.从下面给出的详细描述和从本公开的各种实施例的附图,将更全面地理解本公开的各种实施例。
4.图1图示了根据本公开的实施例的示例系统架构。
5.图2是图示根据本公开的实施例的用于基于连接字段生成叉积的方法的流程图。
6.图3是图示根据本公开的实施例的用于对数据集执行映射归约作业集以生成叉积的方法的流程图。
7.图4a图示了根据本公开的实施例的用于基于连接字段从数据集生成叉积的映射归约作业集的第一作业的图。
8.图4b图示了根据本公开的实施例的用于基于连接字段从数据集生成叉积的映射归约作业集的第二作业的图。
9.图4c图示了根据本公开的实施例的用于基于连接字段从数据集生成叉积的映射归约作业集的第三作业的图。
10.图4d图示了根据本公开的实施例的用于基于连接字段从数据集生成叉积的映射归约作业集的第四作业的图。
11.图4e图示了根据本公开的实施例的用于基于连接字段从数据集生成叉积的映射归约作业集的第五作业的图。
12.图4f图示了根据本公开的实施例的从包括时间范围的数据集生成叉积的映射归约作业集的第一作业的映射阶段的图。
13.图5是图示根据本公开的实施例的示例性计算机系统的框图。
具体实施方式
14.以下描述阐述了许多具体细节,例如具体系统、组件和方法等的示例,以提供对本公开的若干实施例的良好理解。然而,对于本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下实践本公开的至少一些实施例。在其他情况下,没有详细描述或以简单的框图格式呈现众所周知的组件或方法,以避免不必要地模糊本公开。因此,所阐述的具体细节仅仅是示例性的。特定实施例可以与这些示例性细节不同并且仍然被认为在本公开的范围内。
15.本公开的方面涉及使用映射归约框架的叉积生成。现代数据中心通常包括数千台主机,这些主机集体操作,以为来自更多远程客户端的请求提供服务。在操作期间,这些数据中心的组件会产生大量机器生成的数据。通常,数据可以转换为有用的数据产品,转换后的数据可以用于下游过程,例如输入到经过训练的机器学习模型或用于执行特定操作,例如相似性分析和评分分析等。
16.一种这样的数据变换是叉积(也称为“笛卡尔积”)。叉积可以指从运算(例如叉积运算)导出的值的集合,该运算将数据集的每个值与同一数据集的每个其他值或另一个或多个数据集的每个值配对。例如,数据集a可能包括4个条目:{value 1,value 2,value 3,value4}。数据集a的叉积将数据集a的每个值与数据集a的每个剩余值配对。数据集a的叉积包括值集:{[value 1,value 2],[value 1,value 3],[value 1,value 4],[value 2,value 3],[value 2,value 4],[value 3,value 4]}。使用大型数据集创建叉积会消耗大量计算机资源,例如计算、存储器和存储资源。
[0017]
映射归约是一种用于使用计算机集群并行处理和生成大型数据集的编程框架。映射归约作业包括映射任务和归约(reduce)任务。映射任务可以包括一个或多个映射操作。归约任务可以包括一个或多个归约操作。映射任务执行数据集的过滤和存储,归约任务执行汇总操作。
[0018]
在一些情况下,从数据集的所有数据导出的单个叉积可能不是有用的数据积。相反,有用的数据积可以包括从数据集生成的多个叉积,其中,每个叉积都基于特定值(例如,连接到特定键上)。例如,数据集可以有5个条目,其值如下:[user1:ip1]、[user 2:ip1]、[user 3:ip1]、[user 1:ip2]、[user 2:ip2]。整个数据集的叉积将五个值中的每个与每一个其他值配对。其中每个都基于特定值(例如,连接到特定键)的数据集的多个叉积生成具有“ip1”的值的叉积{[user 1:ip1,user 2:ip1],[user 1:ip1,user 3:ip1],[user 2:ip1,user 3:ip1]}和针对“ip2”的另一个叉积{[user 1:ip2],[user 2:ip2]}。
[0019]
在一些常规系统中,映射归约可用于为数据集的所有值生成单个叉积。数据集可能很大,用大数据集生成叉积产生更大的数据集。对于具有100万个条目的数据集的叉积,得到的叉积可以有1万亿个条目。使用映射归约为数据集(尤其是大型数据集)的所有值生成单个叉积可能效率低下并消耗大量计算资源、存储器资源和存储资源。在其他传统系统中,数据集可以按值拆分为多个数据集,以便每个数据集都有包含特定值的条目。可以在每个数据集上运行映射归约作业(或作业集)以生成每个数据集的叉积。但是,对于大型数据集,以上述方式拆分数据集可以产生数千甚至数百万个较小的数据集。可以为每个较小的数据集创建映射归约作业(或作业集),这本身可能是不切实际或站不住脚的。单独的映射归约作业通常串行运行,这可能会很慢并且对计算机资源的使用效率低下。此外,在使用映射归约生成叉积时,执行高效的并行处理可能具有挑战性。例如,数据可能倾斜,以便与特定值(例如,键)相关联的数据可以比与不同值(例如,键)相关联的其他数据大得多。数据倾斜会导致映射归约框架中计算资源的低效使用,因为一些处理节点可能会花费大量时间处理大数据块,而其他节点在处理小数据块后处于空闲状态。
[0020]
本公开的方面通过为数据集生成多个叉积来解决上述和其他挑战,每个叉积都基于连接(join)字段。连接字段可以指示将基于数据集条目的特定数据字段生成键值对的键(例如,连接到特定键上)。如果由连接字段识别的数据字段中的值相同,则生成的键值对的
键相同。可以为具有相同键的键值对组生成叉积,以便数据集的多个叉积每个都基于特定值。
[0021]
在一些实施例中,映射归约作业集将数据集转换为多个键值对组,其中,每个键值对组共享相同的键。对数据集执行的映射归约作业集可以进一步产生多个叉积,其中,每个叉积用于具有相同键的键值对组,而不生成不共享相同键的键值对的叉积。
[0022]
在实施例中,映射归约作业集修改键值对组的键以控制发送到任何一个归约器的键值对的数量。通过控制发送到任何一个归约器的键值对的数量,生成叉积的计算负载分布在可用的归约器之间,这允许叉积计算得更快,并且更有效地使用计算、存储器和存储资源。
[0023]
因此,本文描述的技术允许使用映射归约作业集从数据集生成多个叉积。上述通过下述方式来减少计算资源(例如,处理资源)、存储器资源和存储资源:通过基于连接字段创建叉积,这产生每个都基于特定值(例如,连接到特定键上)的叉积,而不是整个数据集的单个叉积;并通过修改键名来控制下游映射归约操作中由归约器处理的键值对的数量。
[0024]
图1图示了根据本公开的实施例的示例系统架构100。系统架构100(这里也称为“系统”)包括客户端设备110a和110b(这里一般称为“客户端设备110”)、网络105、数据存储106、协作平台120、服务器130和计算机集群150。可以注意到,提供系统架构100用于说明而非限制。在实施例中,系统架构100可以包括以相同或不同方式配置的相同、更少、更多或不同的组件。
[0025]
在一个实施例中,网络105可以包括公共网络(例如,因特网)、专用网络(例如,局域网(lan)或广域网(wan))、有线网络(例如,以太网)、无线网络(例如802.11网络、网络或无线lan(wlan))、蜂窝网络(例如长期演进(lte)网络)、路由器、集线器、交换机、服务器计算机或其组合。
[0026]
在一个实施例中,数据存储106可以是存储器(例如,随机存取存储器)、高速缓存、驱动器(例如,硬盘驱动器)、闪存驱动器、数据库系统或能够存储数据的另一种类型的组件或设备。数据存储106还可以包括也可以跨越多个计算设备(例如,多个服务器计算机)的多个存储组件(例如,多个驱动器或多个数据库)。
[0027]
在实施例中,服务器130可以是一个或多个计算设备(例如,机架式服务器、服务器计算机、物理服务器集群等)。在实施例中,服务器130可以被包括在协作平台120中,是一个独立的系统,或者是另一个系统或平台的一部分。服务器130可以包括叉积模块140。
[0028]
在一些实施例中,协作平台120可以是可以用于执行协作平台120的操作并为用户提供对协作平台120的访问的一个或多个计算设备(例如机架式服务器、路由器计算机、服务器计算机、个人计算机、大型计算机、膝上型计算机、平板计算机、台式计算机等)、数据存储(例如硬盘、存储器、数据库)、网络、软件组件或硬件组件。
[0029]
在实施例中,协作平台120还可以包括网站(例如,网页)或应用后端软件,其可以用于向用户提供对协作平台120提供的内容的访问。例如,用户可以使用在客户端设备110上的协作应用114访问协作平台120。可以注意到协作应用114a和114b在本文中通常可以称为协作应用114。在一些实施例中,协作应用114可以是同一应用的两个实例。
[0030]
在实施例中,协作平台120可以是一种提供用户之间的联系的社交网络或一种允许用户(例如,最终用户或消费者)为平台创建内容的用户生成的内容系统,其中,创建的内
容也可能被系统的其他用户消费。在本公开的实施例中,“用户”可以被表示为单个个体。然而,本公开的其他实施例涵盖作为由用户集或自动化源控制的实体的“用户”(例如,创建用户)。例如,在用户生成的内容系统中联合为社区或群组的个人用户集可以被视为“用户”。
[0031]
在一个实施例中,协作平台120可以是游戏平台,诸如在线游戏平台或虚拟游戏平台。例如,游戏平台可以向可以使用客户端设备110经由网络105访问游戏122a

122z或与游戏122a

122z交互的用户社区提供单人游戏或多人游戏。在实施例中,例如,游戏122(也称为“视频游戏”、“在线游戏”或“虚拟游戏”)可以是二维(2d)游戏、三维(3d)游戏(例如,使用创建者模块126的3d用户生成的游戏)、虚拟现实(vr)游戏或增强现实(ar)游戏。在实施例中,用户(诸如玩游戏的用户)可以与其他玩游戏的用户一起参与游戏。在实施例中,可以与游戏122的其他用户实时玩游戏122。
[0032]
在一些实施例中,游戏122可以包括电子文件,可以使用被配置为向实体呈现游戏内容(例如,数字媒体项)的软件、固件或硬件来执行或加载该电子文件。在实施例中,可以使用游戏引擎124来执行和呈现游戏122。在一些实施例中,游戏122可以具有共同的规则集或共同目标,并且游戏122的环境共享共同的规则集或共同的目标。在实施例中,不同的游戏可以具有彼此不同的规则或目标。
[0033]
可以注意到,提供托管游戏122的协作平台120是出于说明而非限制的目的。在一些实施例中,协作平台120可以托管一个或多个媒体项目。媒体项目可以包括但不限于数字视频、数字电影、数字照片、数字音乐、音频内容、网站内容、社交媒体更新、电子书、电子杂志、数字报纸、数字音频读物、电子期刊、网络博客、真简易信息聚合(rss)订阅源、电子漫画书、软件应用等。在实施例中,媒体项目可以是可以使用被配置为呈现向用户呈现数字媒体项的软件、固件或硬件来执行或加载的电子文件。
[0034]
在一些实施例中,协作平台120或客户端设备110可以包括游戏引擎124。在实施例中,游戏引擎124可以用于游戏122的开发或执行。例如,游戏引擎124可以包括渲染引擎(“渲染器”),其用于2d、3d、vr或ar图形、物理引擎、碰撞检测引擎(和碰撞响应)、声音引擎、脚本功能、动画引擎、人工智能引擎、网络功能、流功能、存储器管理功能、线程功能、场景图功能或对过场动画的视频支持以及其他特征。游戏引擎124的组件可以生成帮助计算和渲染游戏122的命令(例如,渲染命令、碰撞命令、物理命令等)。在一些实施例中,客户端设备110的游戏引擎124可以独立地、与协作平台120的游戏引擎124协作地或组合两者地工作。
[0035]
在实施例中,协作平台120可以包括创建者模块126。在实施例中,创建者模块126可以允许协作平台120的用户成为设计或创建在现有游戏122中的环境、创建新游戏或创建在游戏或环境中的新的游戏对象的创建用户。
[0036]
在实施例中,创建者模块126可以允许用户创建、修改或定制角色。在实施例中,角色(或通常的游戏对象)由组件构成,其中,一个或多个组件可由用户选择,这些组件自动连接在一起以帮助用户进行编辑。一个或多个角色(在此也称为“化身”或“模型”)可以与用户(在此也称为“玩游戏的用户”)相关联,其中,用户可以控制该角色以促进用户与游戏122的交互。在实施例中,角色可以包括诸如身体部位(例如,头发、手臂、腿等)和配件(例如,t恤、眼镜、装饰图像、工具等)的组件。在实施例中,可定制的角色的身体部位包括头部类型、身体部位类型(手臂、腿、躯干和手)、面部类型、头发类型和皮肤类型等。在实施例中,可定制的配饰包括衣服(例如,衬衫、裤子、帽子、鞋子、眼镜等)、武器或其他工具。在实施例中,用
户还可以控制角色的尺度(例如,高度、宽度或深度)或角色的组件的尺度。在实施例中,用户可以控制角色的比例(例如,块状、解剖的等)。可以注意到,在一些实施例中,角色可能不包括角色游戏对象(例如,身体部位等),但用户可以控制角色(没有角色游戏对象)以促进用户与游戏的交互(例如,其中没有渲染角色游戏对象,但用户仍然控制角色来控制游戏内动作的益智游戏)。
[0037]
在实施例中,执行创建者模块126的协作平台120包括用户接口网站或应用(例如协作应用114),其中,用户(在此也称为“创建用户”、“创建者”、“所有者”或“拥有用户”)可以访问由协作平台120托管的在线计算资源(例如,云资源),以用于构建、管理、编辑个人拥有的游戏122或游戏环境以及与个人拥有的游戏122或游戏环境交互的目的。在实施例中,创建者模块126包括用户可用于创建和实例化三维虚拟游戏或环境的工具。在实施例中,创建者模块126对希望创建和管理他们自己的私人虚拟游戏122的用户可用。在实施例中,用户可以使用协作应用114访问创建者模块126。在实施例中,创建者模块126可以通过协作应用114使用用户界面(在此也称为“开发者界面”)以允许用户访问创建者模块126的功能。在实施例中,开发者界面可以是协作应用114的一部分。例如,协作应用114的开发者界面可以允许用户访问可以由用户选择来构建游戏环境或构建游戏122的游戏对象库。用户可以通过开发者界面发布他们的游戏对象,从而游戏对协作平台120的用户可用。
[0038]
在实施例中,协作平台120可以包括消息传递模块128。在实施例中,消息传递模块128可以是允许用户经由诸如网络105的通信系统交换电子消息的系统、应用或模块。消息传递模块128可以与协作应用114相关联(例如,协作应用114的模块或者是单独的应用)。在实施例中,用户可以与消息传递模块128交互并在协作平台120的用户之间交换电子消息。消息传递模块128可以是例如即时消息传递应用、文本消息传递应用、电子邮件应用、语音消息传递应用、视频消息传递应用或其组合等等。
[0039]
在实施例中,消息传递模块128可以促进用户之间的电子消息的交换。例如,一个用户可以登录到客户端设备110a上的消息传递应用,而另一个用户可以登录到客户端设备110b上的消息传递应用。两个用户可以开始交谈,诸如即时消息传递交谈。消息传递模块128可以通过在协作平台120的用户之间发送和接收电子消息来帮助促进消息传递交谈。在另一实施例中,两个用户可以使用各自的消息传递应用来参与彼此的游戏内对话,其中,对话可以是包括可玩性游戏(gameplay)的视图的一部分。
[0040]
在实施例中,客户端设备110a到110b可以每个包括计算设备,诸如个人计算机(pc)、移动设备(例如,膝上型计算机、移动电话、智能电话、平板计算机或上网本计算机)、网络连接的电视、游戏控制台等。在一些实施例中,客户端设备110a到110b也可以称为“用户设备”。在实施例中,一个或多个客户端设备110可以在任何给定时刻经由协作应用114连接到协作平台120。可以注意到,提供客户端设备110的数量作为例示而非限制。在实施例中,可以使用任意数量的客户端设备110。
[0041]
在实施例中,每个客户端设备110可以包括协作应用114的实例。在一个实施例中,协作应用114可以是允许用户使用协作平台120并与之交互的应用,诸如控制由协作平台120托管的虚拟游戏中的虚拟角色,或者查看或上传内容,诸如游戏122、图像、视频项目、网页和文档等。在一个示例中,协作应用114可以是可以访问、检索、呈现或导航由网络服务器提供的内容(例如,虚拟环境中的虚拟角色等)的网络应用(例如,与网络浏览器结合操作的
应用)。在另一示例中,协作应用114可以是本地应用(例如,移动应用或游戏程序),其在客户端设备110本地安装和执行并且允许用户与协作平台120交互。协作应用114可以向用户渲染、显示或呈现内容(例如,网页、媒体查看器)。在一个实施例中,协作应用114还可以包括嵌入在网页中的嵌入式媒体播放器(例如,播放器)。
[0042]
一般而言,在一个实施例中描述为由协作平台120执行的功能也可以在其他实施例中(如果合适)由客户端设备110a至110b或服务器130执行。此外,归因于特定组件的功能可以由一起操作的不同或多个组件来执行。还可以作为通过适当的应用编程接口(api)提供给其他系统或设备的服务来访问协作平台120。
[0043]
在实施例中,协作平台120可以在协作平台120的操作中生成大量数据。例如,协作平台120每天可以有数百万用户参与用户会话以玩或创建游戏122。大量与用户会话相关的原始数据可以存储在与数据存储106相关联的一个或多个数据库中。会话(在此也称为“用户会话”)可以指在打开应用(例如,协作应用114)以访问协作平台120时开始并在应用关闭时结束的时间段。在一些实施例中,会话可以跨越当打开应用并且用户正在与协作平台120交互时开始的时间段(例如,时间范围)。当用户不活动达到阈值时间段时,会话可以结束(例如,即使应用仍处于打开状态)。会话信息可以包括描述特定会话的上下文信息(例如,开始和结束时间戳、客户端设备类型、用于访问协作平台120的互联网协议地址等)并且包括描述用户与协作平台120交互的用户活动信息(例如,控制角色动作、文本消息等的用户输入)。
[0044]
在实施例中,可以使用叉积模块140来确定数据集的叉积。叉积模块140可以使用映射归约作业集来确定一个或多个数据集的叉积。映射归约作业可以指映射归约的两个阶段(例如映射阶段和归约阶段)。在映射阶段,一个或多个映射操作(例如映射任务)从输入数据文件中检索数据(例如键值对)并根据映射操作产生中间数据值。在归约阶段,一个或多个归约操作(例如归约任务)根据归约操作(例如,组合共享相同键的中间值)合并或否则组合中间数据值以产生输出数据。映射归约作业集可以指通常是串行地执行的两个或更多个映射归约作业。例如,串行地执行的两个映射归约作业可以包括第一映射归约作业(例如,映射阶段和归约阶段),其产生用作第二映射归约作业(例如,另一个映射阶段和另一个归约阶段)的输入的输出。
[0045]
在一些实施例中,用于在并行处理环境中大规模处理数据的系统包括一个或多个计算机集群150。可以注意到,出于例示而非限制的目的,计算机集群150被示为单个集群。计算机集群150可以包括一个或多个计算机集群。在实施例中,计算机集群150包括一个或多个互连节点132和134a至134n以执行共同任务,以便计算机集群150可以被视为单个计算机系统。例如,计算机集群150包括主节点132(通常称为“节点132”)和工作者节点134a

134n(通常称为“节点134”或“工作者节点134”)。计算机集群150的每个节点132和134可以包括但不限于任何数据处理设备,诸如处理器、台式计算机、膝上型计算机、大型计算机、个人数字助理、服务器计算机、手持设备或多管芯处理器的一个或多个管芯(die)或配置为处理数据的任何其他设备。计算机集群150的节点132和134可以通过诸如网络105的网络彼此连接。每个节点132和134可以运行其自己的操作系统实例。
[0046]
在实施例中,计算机集群150的每个节点132和134可以具有其自己的物理或虚拟存储器。存储器可以包括但不限于主存储器,诸如只读存储器(rom)、闪存、动态随机存取存
储器(dram)或静态随机存取存储器(sram)。计算机集群150的每个节点可以具有存储在诸如本地存储盘的本地存储(未示出)上的数据。计算机集群150以及计算机集群150的每个节点132和134可以进一步实现各种基于网络可访问的服务器的功能(未示出)或包括其他数据处理设备。
[0047]
在一些实施例中,主节点132可以控制映射归约作业的方面。例如,主节点132可以确定使用多少映射操作、使用多少归约操作、使用哪些过程和处理设备(例如,节点)来执行操作、在哪里存储中间数据和输出数据、如何响应于处理失败等。主节点132可以指导一个或多个工作者节点134执行映射

归约作业的各种操作。可以注意到,单个映射归约作业可以并行地在计算机集群150的一个或多个节点134上运行。
[0048]
计算机集群的节点134可以执行映射操作、归约操作或两者。个体节点134可以并行或串行地执行一个或多个映射操作。个体节点134可以并行或串行地执行一个或多个归约操作。“映射器”可以指执行一个或多个映射操作的节点134。“归约器”可以指执行一个或多个归约操作的相同或不同的节点134。在一些实施例中,单个节点134可以包括一个或多个映射器、一个或多个归约器或两者。
[0049]
在实施例中,计算机集群150可以运行映射归约框架。计算机集群150可以被配置为运行特定的映射归约框架,诸如apache
tmtm
infinispan或apache
tm
spark
tm

[0050]
计算机集群150可以与一个或多个队列136相关联。队列136可以包括存储元素的数据结构。队列136可以使用与一个或多个映射归约作业相关联的调度信息帮助计算机集群150。
[0051]
在一些实施例中,存储在队列136中的元素可以包括标记138。在一些示例中,标记138包括计算机集群150在其上执行一个或多个映射归约操作的实际数据单元。在其他示例中,标记138可以识别存储在数据存储106处的数据单元的位置。例如,每个标记138可以与数据库中的一行或多行数据相关联。每个标记138可以识别数据库、数据的开始地址(例如,数据库中的开始行)和数据的结束地址(例如,数据库中的结束行)。例如,标记138可以与数据库中的行1至10,000相关联。每个标记138可以识别固定大小的地址范围。例如,第一标记可以识别数据库的行1

10,000,而第二标记可以识别数据库的行10,001

20,000。
[0052]
在实施例中,队列136中的元素可以按顺序保持并且对数据结构的操作可以包括向数据结构添加元素和从数据结构移除元素。例如,队列136可以是先进先出(fifo)队列,其中,添加到队列的第一个元素将是要从队列中移除的第一个元素。
[0053]
在一些实施例中,队列136由诸如主节点132之类的计算机集群150托管。在其他实施例中,队列136可以由另一个组件托管。例如,队列136可以由计算机集群150外部的组件托管。队列136的数据可以存储在存储器(例如,随机存取存储器)、高速缓存、驱动器(例如,硬盘驱动器)、闪存驱动器、数据库系统或能够存储数据的另一种类型的组件或设备。
[0054]
在一些实施例中,使用客户端设备110的用户可以提交对要由计算机集群150执行的一个或多个映射归约作业的请求。计算机集群150的主节点132可以接收映射归约作业并确定要执行的映射归约操作,并且请求一个或多个工作者节点134来执行各种映射归约操作。在实施例中,本公开的方面可由主节点132执行的叉积模块140实现。在其他实施例中,由主节点132、工作者节点134或两者执行的叉积模块140可以实现本公开的方面。
[0055]
为了例示而非限制,叉积模块140被描述为在主节点132处实现。在其他实施例中,叉积模块140可以部分地或全部地在协作平台120处实现。在其他实施例中,叉积模块140可以部分地或全部地在一个或多个客户端设备110处实现。在其他实施例中,在客户端设备110、计算机集群150或协作平台120的一个或多个处操作的叉积模块140可以协同工作以执行此处描述的操作。尽管根据协作平台讨论了本公开的实施例,但是实施例也可以一般地应用于生成或存储数据的任何类型的平台。叉积模块140可以帮助促进这里描述的操作,诸如关于图2

4描述的操作。在一些实施例中,叉积模块140可以是另一个应用的一部分,诸如插件。在一些实施例中,叉积模块140可以是在计算设备上执行的独立应用。
[0056]
在此处讨论的系统收集关于用户的个人信息或者可以利用个人信息的情况下,可以向用户提供以下机会:控制协作平台120是否收集用户信息(例如,关于用户的社交网络、社交动作或活动、职业、用户偏好或用户当前位置的信息);或者控制是否或如何从协作平台120接收可能与用户更相关的内容。此外,某些数据在被存储或使用之前可能会以一种或多种方式被处理,以便删除个人可识别信息。例如,用户的身份可能会被处理,以便无法确定用户的个人可识别信息,或者在获得位置信息(诸如城市、邮政(zip)编码或州级)时用户的地理位置可以被一般化,以便无法确定用户的具体位置。因此,用户可以控制如何收集关于用户的信息并由协作平台120使用该信息。
[0057]
图2是图示根据本公开的实施例的用于基于连接字段生成叉积的方法200的流程图。方法200可由包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码)、软件(例如,在处理设备上运行以执行硬件模拟的指令)或其组合的处理逻辑执行。在一些实施例中,在计算机集群150处(例如,在节点132或节点134中的一个或多个处)执行的叉积模块140可以执行一些或所有操作。在其他实施例中,在协作平台120、客户端设备110a、客户端设备110b、服务器130或其组合处执行的叉积模块140可以执行一些或所有操作。可以注意到,在一些实施例中,方法200可以包括以任何顺序执行的相同、不同、更少或更多数量的操作。
[0058]
在方法200的块205处,执行方法200的处理逻辑接收对于执行映射归约作业集以基于连接字段从数据集生成叉积的请求。连接字段指示将从数据集的对应子集生成每个叉积。每个子集与相同的键相关联,不同的子集与不同的键相关联。
[0059]
在一些实施例中,连接字段指示每个叉积将以每个键为基础生成,以便每个叉积将从与相同键相关联的对应子集生成而不是从与不同键关联的数据集的数据生成。
[0060]
在一些实施例中,从客户端设备110接收请求(例如,单个请求),其请求用于生成数据集的叉积的映射归约作业集。一个数据集包括一个或多个条目,并且该数据集的每个条目包括特定于该特定条目的数据。该请求可以包括连接字段参数(例如“ip”),该参数指示将在连接字段上(例如,在“ip”上)生成叉积,从而为与相同键相关联的数据集的条目的每个子集创建叉积,但不跨与不同键相关联的数据集的条目。例如,数据集的子集中的每个条目都包含数据“ip1”,而数据集的另一个子集中的每个条目都包含数据“ip2”。为与“ip1”相关联的数据的子集生成叉积,并且为与“ip2”相关联的数据的子集生成另一个叉积,但不会为将包含“ip1”的条目与包含“ip2”的条目配对的数据集生成叉积。
[0061]
在块210处,响应于接收到对于执行映射归约作业集以基于连接字段生成数据集的叉积的请求,处理逻辑对数据集执行映射归约作业集以生成叉积。为了执行映射归约作业集,处理逻辑从数据集的对应子集生成键值对组。相应的键值对组的每个键值对包括相
同的键。
[0062]
可以注意到,可以使用映射归约作业的一个或多个映射操作将数据集的条目转换为键值对。在一些实施例中,以条目的某些数据作为键,条目的全部数据被保留并且成为键值对中的值。连接字段指示条目的哪些数据将成为键。如果多个条目中的键数据相同,则这些条目将生成具有相同或同样键的键值对。将参照图3和图4a

4f进一步描述执行映射归约作业集。
[0063]
在块215处,处理逻辑存储映射归约作业集的最终输出数据,最终输出数据包括键值对组中的每个的叉积。叉积将相应键值对组的每个值与相应键值对组的每个剩余值配对以形成值的对(例如,值对)。
[0064]
图3是图示根据本公开的实施例的用于对数据集执行映射归约作业集以生成叉积的方法300的流程图。方法300可由包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码)、软件(例如,在处理设备上运行以执行硬件模拟的指令)或其组合的处理逻辑执行。在一些实施例中,在计算机集群150处(例如,在节点132或节点134中的一个或多个处)执行的叉积模块140可以执行一些或所有操作。在其他实施例中,在协作平台120、客户端设备110a、客户端设备110b或服务器130或其组合处执行的叉积模块140可以执行一些或所有操作。可以注意到,在一些实施例中,方法300可以包括以任何顺序执行的相同、不同、更少或更多数量的操作。
[0065]
在操作305处,执行方法300的处理逻辑使用数据集执行映射归约作业集的第一作业的第一映射阶段以生成第一中间数据。第一中间数据包括键值对组。特定键值对组的键值对具有相同的键。不同键值对组之间的键值对具有不同的键。
[0066]
在操作310处,处理逻辑使用第一中间数据执行映射归约作业集的第一作业的第一归约阶段以生成第一输出数据。第一输出数据包括具有指示排序顺序和第一键值对组中的键值对的数量的第一修改键的键值对组的第一组。将参照图4a进一步描述作业组中的第一作业。
[0067]
在一些实施例中,数据集可以具有包括时间范围的条目。在数据集具有包括时间范围的条目的实施例中,为了执行映射归约作业集的第一作业的第一映射阶段以使用数据集生成第一中间数据,处理逻辑识别与对于执行生成多个叉积的映射归约作业集的请求相关联的参数。在一些实施例中,参数指示时间单位。对于数据集的每个条目,处理逻辑识别条目中指示的时间范围。处理逻辑以该时间单位递增时间范围。递增从通过时间范围识别的最早时间开始到通过时间范围识别的最后时间。在每次递增时,处理逻辑生成时间戳,该时间戳反映在递增时的时间范围内的时间。处理逻辑基于递增为条目生成一个或多个键值对。一个或多个键值对的键识别递增的时间戳,一个或多个键值对的值识别条目的数据。处理逻辑生成键值对组,其中,相应键值对组的每个键值对包括相同的时间戳(例如,相同的键)。将参照图4f进一步描述上面的映射操作。
[0068]
在操作315处,处理逻辑使用第一作业的第一输出数据执行映射归约作业集的第二作业的第二映射阶段以生成第二中间数据。第二中间数据包括具有第一修改键的第一键值对组。可以注意到,为了清楚起见,针对第一键值对组描述操作315和随后的操作320

350以产生第一键值对组的叉积。可以理解,可以对其他键值对组执行类似的操作,其中,为每个键值对组生成叉积。总的来说,为数据集生成了多个叉积,每个叉积都基于特定的值(例
如,连接到特定键上)。
[0069]
在操作320处,处理逻辑使用第二中间数据执行映射归约作业集的第二作业的第二归约阶段以生成第二输出数据。第二输出数据包括具有第二修改键的第一键值对组的第一子组。修改第一键值对组的第一修改键以生成识别第一键值对组的第一子组的第二修改键。
[0070]
在一些实施例中,为了使用第二中间数据来执行映射归约作业集的第二作业的第二归约阶段以生成第二输出数据,处理逻辑按第一修改键识别的排序顺序对第一键值对组的键值对进行排序。处理逻辑在由排序的键值对的初始键指示的第一键值对组中识别键值对的数量。处理逻辑为每个键值对子组(与第一键值对组相关联)确定键值对的数量。第一子组中键值对的数量不超过请求中识别的键值对的最大数量。处理逻辑为键值的第一子组生成第二修改键,以便第二修改键从第一子组识别特定子组。将参照图4b进一步描述映射归约作业集的第二映射归约作业。
[0071]
在操作325处,处理逻辑使用第二作业的第二输出数据执行映射归约作业集的第三作业的第三映射阶段以生成第三中间数据。第三中间数据包括键值对的第一子组。
[0072]
在操作330处,处理逻辑使用第三中间数据执行映射归约作业集的第三作业的第三归约阶段以生成第三输出数据。第三输出数据包括从键值对的第一子组生成的键值对的第二子组。键值对的第二子组包括键值对的第一子组和键值对的第一子组的重复键值对,其中,至少修改了重复键值对中的键。将参照图4c进一步描述映射归约作业集的第三映射归约作业。
[0073]
在操作335处,处理逻辑使用第三作业的第三输出数据执行映射归约作业集的第四作业的第四映射阶段以生成第四中间数据。第四中间数据包括键值对的第二子组。
[0074]
在操作340处,处理逻辑使用第四中间数据执行映射归约作业集的第四作业的第四归约阶段以生成第四输出数据。第四归约阶段的每个归约器接收具有相同键的第四中间数据的相应键值对。在每个归约器处,相应键值对的每个值与相应键值对的每个剩余值配对,以生成具有新键的新值(例如,叉积)。第四输出数据包括来自第四作业的每个归约器的新键值对。参照图4d进一步描述映射归约作业集的第四映射归约作业。
[0075]
在操作345处,处理逻辑使用第四作业的第四输出数据执行映射归约作业集的第五作业的第五映射阶段以生成第五中间数据。第五中间数据包括来自第四作业的每个归约器的新键值对。
[0076]
在操作350处,处理逻辑执行映射归约作业集的第五作业的第五归约阶段以执行去重复操作以从来自第四作业的每个归约器的新键值对中移除重复的键值对,并为第一键值对组提供多个叉积中的叉积。如上所述,可以对第一键值对组和其他键值对组(在第一作业中产生)执行类似的操作315

350,以产生数据集的多个叉积。每个叉积都是原始数据集的子集(例如,非重叠子集)上的叉积。
[0077]
图4a图示了根据本公开的实施例的用于基于连接字段从数据集生成叉积的映射归约作业集的第一作业的图。第一映射归约作业400图示了映射器410以及归约器414a和归约器414b(通常称为“归约器414”)。接收到对于执行映射归约作业集的请求,该映射归约作业集基于连接字段从数据集生成叉积。在所示示例中,输入411由映射器410接收。输入411可以包括对其执行映射归约作业集的数据集。如所示,数据集包括10个条目,每个条目包括
数据。例如,条目416包括数据“user 1:ip 2”。连接字段可以被包括为对于执行从数据集生成叉积的映射归约集的请求的参数。在当前示例中,连接字段是“ip”(例如,互联网协议地址),它指示将为其中每个具有特定值的数据集的子集生成叉积。例如,所有具有“ip1”的条目都包括在要为其生成叉积的子集中,所有具有“ip2”的条目都包括在要为其生成另一个叉积的另一个子集中。不生成包括“ip1”的条目和包括“ip2”的条目之间的叉积。
[0078]
在实施例中,映射器410使用数据集(例如,输入411)执行映射任务并生成多个键值对组。例如,映射器410使用每个条目内的数据来基于连接字段“ip”识别键。映射器410识别包括“ip1”的数据集的条目的第一子集并且基于条目的第一子集生成键值对组413a。映射器410识别包括“ip2”的数据集的条目的第二子集并且基于条目的第二子集生成键值对组413b。
[0079]
可以注意到,在一些实施例中,数据集可以包括任意数量的条目。例如,数据集可以包括数百万个条目。可以从数据集中生成数千个键值对组,其中,每个键值对组都基于相同的键。每个键值对组又可以有数千到数百万个都具有相同的键的键值对。还可以注意到,在图4a

4f中,对应映射作业的每个映射阶段可以使用一个或多个映射器,并且对应归约作业的每个归约阶段可以使用一个或多个归约器。
[0080]
如上所述,可以使用映射任务的一个或多个映射操作将数据集的条目转换为键值对。在一些实施例中,条目的一些数据被用作键(例如,“ip1”或“ip2”),并且条目的全部数据被保留并且成为键值对中的值。连接字段(例如“ip”)指示条目的哪个数据将成为键(例如键数据)。如果多个条目中的键数据(例如,“ip1”或“ip2”)相同,则这些条目将为键值对组(例如,键值对组413a或键值对组413b)生成键值对。
[0081]
映射器410的输出412(例如,第一中间数据)包括键值对组413a和键值对组413b。输出412用作第一映射归约作业400的归约阶段的输入(未示出)。每个组的键值对根据键被发送到不同的归约器414a和414b,以便具有相同键(“ip1”)的组413a的键值对被发送到归约器414a,并且具有相同键(“ip2”)的组413b的键值对被发送到归约器414b。在实施例中,具有相同键的键值对被发送到特定的归约器。
[0082]
在归约阶段,归约器414从映射器410接收输出412。归约器414修改输出412,以便键值对组413a和413b的键被修改(例如,第一修改键)以影响输出415a和输出415b在第二映射作业420的下一个归约阶段如何进行排序和重新分组(例如,创建子组)。
[0083]
例如,键值对组413a被传递给归约器414a。归约器414a执行归约任务,该任务对键值对组413a中的键值对的总数进行计数。键值对组413a的键值对之一用排序id 417被修改,以便在第二映射作业420的下一个归约阶段,键值对组413a被排序,以便具有排序id 417的键值对的位置在排序顺序中是已知的。
[0084]
在当前示例中,排序id 417包括将允许键值对组413a中的所选键值对在排序操作之后成为第一或初始键值对的值。在当前示例中,键值对组413a的最后键值对419的键“ip1”被修改为(“0”)以识别键值对419将是排序顺序中的第一键值对。键值对组413a的其他键值对用其他排序id被修改。其他键值对的其他排序id为大于排序id417(“0”)的数字,以识别其他键值对在排序顺序中排在最后的键值对419之后。其他键值对的其他键被修改为“1”,其指示它们将在键值对419之后排序。可以注意到,键值对419可以包含附加信息(例如,组大小id 418),其可以被第二映射作业420的下一个归约阶段使用。知道键值对419的
位置(按排序顺序的放置)允许第二映射作业420的下一个归约阶段知道去哪里寻找以从键值对419的修改键中提取信息(例如,组大小id 418)。
[0085]
在实施例中,归约器414a对键值对组413a中的键值对的数量进行计数。键值对419的键被进一步修改(例如,组大小id 418)以指示键值对组413a中键值对的数量。在该示例中,有5个键值对,键值对419的键进一步被修改为“5”以指示键值对组413a中键值对的数量。
[0086]
可以注意到,键值对组413a的修改键也被称为第一修改键。第一修改键指示键值对组413a中的排序顺序和键值对的数量。还可以注意到,可以对键值对组413b执行类似的操作。为了清楚起见,随后描述的关于图4b

4f描述的映射归约作业描述了对键值对组413a执行的映射和归约任务。可以理解,即使没有明确记载,也可以对键值对组413b执行类似的映射和归约任务。
[0087]
图4b图示了根据本公开的实施例的用于基于连接字段从数据集生成叉积的映射归约作业集的第二作业的图。第二映射归约作业420图示了映射器430和归约器424。第二映射归约作业420将键值对组413a划分成子组,以便在映射归约作业集的后续映射归约作业中的处理更高效。第二映射归约作业420创建键值对组413a的、大小不大于键值对的最大数量的子组。
[0088]
映射器430接收映射归约作业集的第一映射归约作业400的归约器414a的输出415a。输出415a包括具有第一修改键的第一键值对组413a。来自第一映射归约作业400的归约器414a的输出415a用作映射器430的输入。映射器430使用此输入并生成第二中间数据,诸如输出421。在该示例中,映射器430不修改键值对组413a,但读取键值对组413a并将其传递给归约器424。映射器430的输出421用作归约器424的输入422。可以实现逻辑,以便具有在冒号之前的键中包括信息的相同的前缀(例如,“ip1”)的所有键值对被发送到相同的归约器。
[0089]
在实施例中,归约器424使用来自映射器430的中间数据(例如,输出421)执行第二映射归约作业420的归约阶段以生成输出423。归约器424修改键值对组413a的第一修改键以生成识别键值对组413a的子组(例如,子组425a、425b和425c)的第二修改键。
[0090]
在实施例中,归约器424使用第一修改键(特别地排序id)以排序顺序对键值对组413a进行排序。由键值对组413a的键值对419的键中的第一冒号后的“0”表示的排序id 417排序为排序顺序的初始键。键值对组413a的其余键值对具有较大的排序id并且在键值对419之后排序。
[0091]
在实施例中,归约器424识别由初始键值对(键值对419)的键指示的键值对组413a中的键值对的数量。例如,归约器424知道排序顺序中的哪个位置包含具有组大小id 418的键的键值对,在本实例中为初始位置。归约器414a解析初始键值对(例如键值对419)的键以识别组大小id 418(例如“5”),其识别键值对组413a中的键值对的数量。
[0092]
在实施例中,归约器424确定子组425a、425b和425c(通称为“子组425”)的每个的键值对的数量。子组425是键值对组413a的非重叠子组。在实施例中,参数(例如,最大数量参数)指示每个子组425要包括的键值对的最大数量,以便子组425中的任何一个中的键值对的数量不超过由最大数量参数识别的键值对的最大数量。在一些实施例中,执行生成叉积的映射归约操作集的初始请求包括最大数量参数。在其他实施例中,最大数量参数可以
是预先确定的,并且是映射归约作业集的脚本或源代码的一部分。在当前示例中,最大数量参数指示子组425中键值对的最大数量不能超过两个键值对。
[0093]
在实施例中,归约器424为键值对的子组(例如,子组425)生成第二修改键,以便第二修改键从子组425中识别特定子组并且特定子组不超过键值对的最大数量。例如,子组425a包括最大数量的键值对(例如,两个键值对)。子组425a的键在冒号后修改为“0

2”,其表示子组425a的键值对属于三个子组的子组“0”。类似地,子组425b的键在冒号后修改为“1

2”,其表示子组425b的键值对属于三个子组的子组“1”。子组425c的键在冒号后修改为“2

2”,其表示子组425c的键值对属于三个子组中的子组“2”。可以注意到,子组425c仅包括一个键值对,因为没有额外的键值对可用于填充子组。
[0094]
图4c图示了根据本公开的实施例的基于连接字段从数据集生成叉积的映射归约作业集的第三作业的图。第三映射归约作业440图示了映射器431和归约器433a、433b和433c(通称为“归约器433”)。第三映射归约作业440制作子组425的键值对的重复副本,并将键值对的副本与相应子组425的键值对组合。在某些情况下,复制的键值对的键被修改。执行重复子组425的键值对以及修改至少复制的键值对的键,以便将具有相同值(但不同键)的键值对发送到第四映射归约作业450中的不同归约器。第四映射归约作业450将为键值对组(例如,键值对组413a)生成叉积。通过在第三映射归约作业440处重复子组425的键值对并且修改至少复制的键值对的键,处理负载更均匀地分布在第四映射归约作业450的归约器上并以便键值对组413a的每个值与键值对组413a的每个剩余值能够配对,即使操作分布在多个归约器上。第四映射归约作业450处的每个归约器可以接收预定最大数量的键值对(至少部分基于在映射归约作业420处子组425的较早生成以包括不超过最大数量的键值对)。
[0095]
在实施例中,为了执行第三映射归约作业440的映射阶段,映射器431接收来自第二映射归约作业420的归约器424的输出423。输出423变成映射器431的输入,并且包括键值对组413a的子组425。在特定示例中,映射器431不修改键值对组413a的子组425。子组425变成中间数据(例如,输出432)。中间数据被读取并传递到归约器433,使得基于子组键将每个子组425a、425b和425c分别传递到不同的归约器433a、433b和433c。在实施例中,具有相同键的键值对被传递到相同的归约器。
[0096]
在实施例中,在第三映射归约作业440的归约阶段,归约器433a、433b和433c分别接收子组425a、425b和425c。子组425a、425b和425c被相应的归约器433用作输入434a、434b和434c。归约器433a、433b和433c分别生成输出435a、435b和435c。归约器433的输出435a、435b和435c分别包括键值对的第二子组436a、436b和436c。从第一子组425a、425b和425c生成子组436a、436b和436c。子组436a、436b和436c包括来自相应子组425a、425b和425c的键值对以及相应子组425a、425b和425c的重复键值对。至少重复的键值对的键被修改。
[0097]
例如,归约器433a从映射器431接收输入434a。输入434a包括来自子组425a的键值对。归约器433a将键值对从子组425a传递到输出435a(例如,子组436a的第二和第四键值对)。归约器433a还重复子组425a的键值对并修改重复的键值对的键(例如,子组436a的第一和第三键值对)。
[0098]
在另一个示例中,归约器433c从映射器431接收输入434c。输入434c包括来自子组425c的键值对。归约器433c将键值对从子组425c传递到输出435c,重复子组425c的键值对
并修改重复的键值对和来自子组425c的传递的键值对两者的键。
[0099]
可以注意到,归约器433修改键以包括归约器id。可以使用归约器id,以便将具有相同归约器id的键发送到后续映射归约作业(例如,第四映射归约作业450)中的相同归约器。归约器id显示在键的冒号之后。例如,在子组436a中,第一键值对显示归约器id“0

1”,第二键值对显示归约器id“0

2”,第三键值对显示归约器id“0

1”。在一些实施例中,子组436的键生成被优化以减少在第四映射归约作业450处生成的重复叉积记录的数量,同时保证键值对组413a的每个值与键值对组413的每个剩余值配对。
[0100]
在一个示例中,可以在归约器433a处示出键优化。输入434a包括子组425a。冒号后的子组425a的键中的信息(即“0

2”)指示子组id和子组id的数量。对于子组425a,子组id为“0”,子组id数为“2”(其中,组的总数为3——组“0”、“1”和“2”)。归约器443a将在所有可能的子组id上迭代子组id。例如,归约器433a将产生子组id

子组id数如下:“0

0”、“0

1”、“0

2”。如果子组id

子组id数的迭代不重复编号(例如,“0

1”、“0

2”),则所得的子组id

子组id数用作子组436a的键的一部分。如果子组id

子组id数的迭代确实重复编号(例如,“0

0”),则所得的子组id

子组id数不用作子组436a的键的一部分。
[0101]
图4d图示了根据本公开的实施例的用于基于连接字段从数据集生成叉积的映射归约作业集的第四作业的图。第四映射归约作业450图示了映射器441和归约器443a、443b和443c(通称为“归约器443”)。在第四映射归约作业450,每个归约器443生成值对(例如,叉积对),以便键值对的每个值与特定归约器443处的剩余键值对的每个剩余值配对。在实施例中,第四映射归约作业450有效地为键值对组413a生成叉积。在实施例中,第四映射归约作业450的归约阶段的输出可以包括可以在第五映射归约作业460处去重复的重复键值对(例如,叉积对)。相应归约器443的输出445a、445b和445c(通称为“输出445”)包括新的键值对,其值包括成对的值(例如,叉积对)。
[0102]
在实施例中,包括键值对组413a的子组436的第三映射归约作业440的输出435被发送到第四映射归约作业450的映射器441以用作映射器441的输入。在第四映射归约作业450的映射阶段,映射器441使用第三映射归约作业440的输出435生成中间数据。中间数据包括子组436(例如,键值对的第二子组)。映射器441读取输入(例如,键值对的子组436)并将键值对的子组436中的每个发送到归约器443中的相应一个。在实施例中,向同一个归约器发送具有相同键的键值对,以便子组436a被发送到归约器443a,子组436b被发送到归约器443b,并且子组436c被发送到归约器443c。子组436a、436b和436c分别用作相应归约器443处的输入444a、444b和444c。
[0103]
在实施例中,归约器443分别执行第四映射归约作业450的归约阶段以生成的输出445a、输出445b和输出445c(通称为“输出445”)。在相应的归约器443,子组436的相应键值对的每个值与子组436的相应键值对的每个剩余值配对以生成具有新键的新值(例如,作为叉积对的新键值对)。
[0104]
例如,归约器443c接收包括子组436c的输入444c,子组436c都共享相同的键“ip 1:0

2”。子组436c的值都不同。归约器443c创建新的键值对,如输出445c所示,其中,子组436c的每个值与子组436c的每一个另外的值配对。如图所示,输出445c的键值对包括“[user 1:ip 1,user 4:ip 1]”、“[user 1:ip 1,user 5:ip 1]”和“[user 4:ip 1,user 5:ip 1]”。
[0105]
在一些实施例中,在输出445所示的新键值对的新键使用与数据集的条目相关联的唯一id,新键值对的值源自(例如,导出自)该数据集。例如,归约器443a的输出445a处的第一键值对包括键“q1:q5”。“q1”表示与从中导出值“user 1:ip1”的数据集的第一条目(例如,图4a的输入411)相关联的唯一id,并且“q5”表示与从中导出值“user 5:ip1”的数据集的第五条目相关联的唯一id。使用唯一id将输出445处的新键值对的值与它们在原始数据集中的条目联系起来有助于数据的去重复(例如,删除冗余数据)。例如,可能存在不同键值对的值(例如,输出445处的新键值对的叉积对)相同但源自或导出自数据集的不同条目的情况。在这种情况下,管理员或其他用户可能希望保留源自不同条目的重复值。
[0106]
在一些实施例中,识别从其获得键值对的值的数据集的特定条目的唯一id可以通过映射归约作业集与该值相关联。例如,可以将与值相关联的唯一id插入到数据集的条目中,以便唯一id成为第一映射归约作业400处的键值对的值的一部分,并有效地将值传递给多个映射归约作业,如本文所述。在第四映射归约作业450,可以从键值对的相应值中检索唯一id,并将其用作新键的一部分。在某些情况下,可以在第四映射归约作业450的归约阶段期间从值中移除唯一id。
[0107]
在一些实施例中,物理节点可以执行多个归约器。映射

归约框架可以建立存储器单元(例如,高速缓存),以便每个物理节点都可以访问存储器单元的一定数量的存储器来存储数据。在一些实施例中,与物理节点相关联的存储器单元可以被配置为存储由与特定物理节点相关联的归约器创建的键(或键值对)。存储器单元可用于去重复,以便在将新的键值对写入归约器的输出之前,可以检查高速缓存以查看键是否已存在。如果键存在于存储器单元中,则键值对不会写入归约器的输出。如果存储器单元中不存在该键,则将键值对写入归约器的输出。
[0108]
图4e图示了根据本公开的实施例的基于连接字段从数据集生成叉积的映射归约作业集的第五作业的图。第五映射归约作业460图示了映射器461和归约器463。在第五映射归约作业460,重复键值对被移除(例如,去重复),用于键值对组413a的叉积(没有重复键值对)存储在数据存储处。
[0109]
在实施例中,在第五映射归约作业460的映射阶段,映射器461接收第四映射归约作业450的归约器443的输出445。输出445用作映射器461的输入。映射器使用输入生成中间数据。中间数据包括由第四映射归约作业450的归约器443产生的新键值对。映射器461读取数据并将数据不加更改地传递给归约器463。
[0110]
在实施例中,第五映射归约作业460的归约阶段由归约器463执行。归约阶段执行去重复操作以从新的键值对中去除重复的键值对。输出462提供从其导出键值对组413a的数据集的子集(具有“ip1”的所有条目)的叉积。输出462存储在数据存储中。可以注意到,为了清楚而不是限制,示出了单个归约器463。在一些实施例中,映射器461的输出462中具有相同键的每个键值对被发送到特定的归约器。例如,键为“q1:q5”的键值对被发送到第一归约器,键为“q2:q3”的键值对被发送到第二归约器。每个归约器可以对接收到的键值对执行去重复。
[0111]
还可以注意到,这里描述的作业集包括第一映射归约作业400、第二映射归约作业420、第三映射归约作业440、第四映射归约作业450和第五映射归约作业460。在其他实施例中,可以修改一个或多个映射归约作业。例如,图4f描述了可以在第一映射归约作业400中
实现的替代映射阶段。在另一个示例中,可以针对帮助执行去重复操作的映射归约作业450使用高速缓存。在一些实施例中,可以组合映射归约作业集中的映射归约作业的一个或多个操作。例如,映射归约作业420和映射归约作业440的操作可以组合成单个映射归约作业。在一些实施例中,并非执行映射归约作业集中的所有映射归约作业。例如,在一些实现中,映射归约作业460可以被关于映射归约作业450描述的基于高速缓存的去重复操作替换。
[0112]
图4f图示了根据本公开的实施例的从包括时间范围的数据集生成叉积的映射归约作业集的第一作业的映射阶段的图。在实施例中,映射阶段470可以用作图4a的第一映射归约作业400中所示的映射阶段的替代。在一些实施例中,要在其上生成叉积的数据集的条目可以包括时间数据类型,诸如时间范围。例如,数据集(例如,输入472)的条目473包括时间范围“12:01

12:02”。在某些情况下,生成数据的叉积以了解数据是否在时间上重叠可能是有益的。例如,协作平台120可以确定多个用户是否在同时玩游戏。映射阶段470可以为时间范围内的不同时间(例如,12:02、12:03)创建键值对。在实施例中,映射阶段以时间单位递增时间范围,并且在递增的每个时间戳处创建新的键值对。
[0113]
在实施例中,接收对于执行基于连接字段从数据集生成叉积的映射归约作业集的请求。在所示示例中,输入472由映射器471接收。输入472可以包括对其执行映射归约作业集的数据集。如所示,数据集包括2个条目,其包括数据。例如,条目473包括数据“user 2session:12:01

12:02”。连接字段可以作为参数被包括在对于执行映射归约作业集的请求中。在当前示例中,连接字段是“时间范围”,这指示将基于数据集条目的“时间范围字段”生成键,并为与相同键(例如,相同时间戳)相关联的数据集的子集生成叉积。
[0114]
在一些实施例中,映射阶段470识别与对于生成叉积的请求相关联的时间单位参数。时间单位参数表示时间单位。在当前示例中,时间单位为1分钟。时间单位可以被设置为任何值,诸如小时、天等。
[0115]
在实施例中,对于数据集的每个条目,映射器471识别条目中的时间范围数据字段中的数据。时间范围字段内的数据可以称为时间范围。映射器471以时间单位递增时间范围。从时间范围识别的最早时间开始到时间范围识别的最后时间递增。在每次递增时,都会生成时间戳,该时间戳反映递增时的时间范围内的时间。映射器471基于递增为条目生成一个或多个键值对。一个或多个键值对的键识别递增的时间戳。一个或多个键值对的值识别条目的数据。在实施例中,映射器471生成键值对组。相应键值对组的每个键值对包括相同的时间戳。
[0116]
例如,条目476包括时间范围“12:01

12:03”并且条目473包括时间范围“12:01

12:02”。时间单位为一分钟。对于条目476,映射器从时间范围“12:01

12:03”识别的最早时间,即“12:01”,开始,并将最早时间递增一分钟(例如,12:02)。“12:02”是生成的时间戳,它反映了在递增时在时间范围内的时间。时间范围“12:01

12:03”再次递增一分钟到“12:03”。“12:03”是时间戳和时间范围识别的最后时间。时间戳“12:02”和“12:03”成为键,值是相应条目中的数据(例如,“user 1session:12:01

12:03”)。得到的键值对按键值对组475a和475b中的键进行分组,并传递到图4a的映射归约作业400的归约器阶段。
[0117]
图5是示出根据实施例的示例性计算机系统500的框图。计算机系统500执行一个或多个指令集,这些指令使机器执行本文讨论的任何一种或多种方法。指令集和指令等可以指当被计算机系统500执行时使计算机系统500执行叉积模块140的一个或多个操作的指
令。机器可以以服务器或客户端设备的能力在客户端

服务器网络环境中操作,或作为对等(或分布式)网络环境中的对等机器操作。机器可以是个人电脑(pc)、平板pc、机顶盒(stb)、个人数字助理(pda)、移动电话、网络设备、服务器、网络路由器、交换机或网桥或任何能够执行指令集(顺序或其他)的机器,这些指令指定该机器要采取的动作。此外,虽然仅示出了单个机器,但术语“机器”也应被视为包括单独或联合执行指令集以执行本文讨论的任何一种或多种方法的机器的任何集合。
[0118]
计算机系统500包括处理设备502、主存储器504(例如,只读存储器(rom)、闪存、动态随机存取存储器(dram)(诸如同步dram(sdram)或rambus dram(rdram)等)、静态存储器506(例如,闪存、静态随机存取存储器(sram)等)和数据存储设备516,它们通过总线508相互通信。
[0119]
处理设备502表示一个或多个通用处理设备,诸如微处理器或中央处理单元等。更具体地,处理设备502可以是复杂指令集计算(cisc)微处理器、精简指令集计算(risc)微处理器、超长指令字(vliw)微处理器或实现其他指令集的处理设备或实现指令集的组合的处理设备。处理设备502也可以是一个或多个专用处理设备,诸如专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)或网络处理器等。处理设备502被配置为执行系统架构100和叉积模块140的指令以执行本文讨论的操作。
[0120]
计算机系统500还可以包括网络接口设备522,其提供通过诸如局域网(lan)、内联网、外联网或因特网的网络518与其他机器的通信。计算机系统500还可以包括显示设备510(例如,液晶显示器(lcd)或阴极射线管(crt))、字母数字输入设备512(例如,键盘)、光标控制设备514(例如、鼠标)和信号生成设备520(例如,扬声器)。
[0121]
数据存储设备516可以包括非暂时性计算机可读存储介质524,其上存储了系统架构100和叉积模块140的指令集,这些指令集体现了本文描述的方法或操作中的任何一个或多个。系统架构100和叉积模块140的指令集在由计算机系统500、主存储器504和也构成计算机可读存储介质的处理设备502执行期间也可以完全或至少部分地驻留在主存储器504和/或处理设备502内。指令集还可以经由网络接口设备522在网络518上被发送或接收。
[0122]
虽然计算机可读存储介质524的示例被示为单个介质,但术语“计算机可读存储介质”可以包括存储指令集的单个介质或多个介质(例如,集中式或分布式数据库和/或相关的高速缓存和服务器)。术语“计算机可读存储介质”可以包括能够存储、编码或携带供机器执行的指令集并且使机器执行本公开的任何一个或多个方法的任何介质。术语“计算机可读存储介质”可以包括但不限于固态存储器、光学介质和磁介质。
[0123]
在前面的描述中,阐述了许多细节。然而,对于受益于本公开的本领域普通技术人员而言显而易见的是,可以在没有这些具体细节的情况下实践本公开。在一些情况下,众所周知的结构和设备以框图形式而不是详细示出,以避免混淆本公开。
[0124]
已经根据对计算机存储器内的数据位的操作的算法和符号表示来呈现详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用来最有效地将他们工作的实质传达给本领域的其他技术人员的手段。算法在这里并且通常被认为是导致所需结果的自洽操作序列。操作序列是那些需要对物理量进行物理操纵的序列。通常,尽管不一定,这些量采用能够存储、传输、组合、比较以及以其他方式操纵的电或磁信号的形式。有时,主要是出于常用的原因,将这些信号称为比特、值、元素、符号、字符、术语、数字等已被证明是方
便的。
[0125]
然而,可以记住,所有这些和类似的术语都将与适当的物理量相关联并且仅仅是应用于这些量的方便的标签。除非另有具体说明,否则应理解,在整个描述中,使用诸如“托管”、“确定”、“接收”、“提供”、“发送”、“识别”、“监视”、“增加”或“执行”等的讨论是指计算机系统或类似电子计算设备的动作和过程,该计算机系统或类似电子计算设备操纵表示为计算机系统存储器或寄存器内的物理(例如,电子)量的数据和将其转换成其他数据,该其他数据类似地表示为计算机系统存储器或寄存器或其他此类信息存储、传输或显示设备中的物理量。
[0126]
本公开还涉及一种用于执行这里的操作的装置。该装置可以为所需目的而专门构造,或者它可以包括由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。这种计算机程序可以存储在计算机可读存储介质中,诸如但不限于任何类型的盘,包括软盘、光盘、光盘只读存储器(cd

rom)、磁

光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、磁卡或光卡或任何类型的适合存储电子指令的介质。
[0127]
词语“示例”或“示例性”在本文中用于表示用作示例、实例或例示。在此描述为“示例”或“示例性”的任何方面或设计不一定被解释为优于或有利于其他方面或设计。相反,使用词语“示例”或“示例性”旨在以具体方式呈现概念。如本技术中使用的,术语“或”旨在表示包含性的“或”而不是排他性的“或”。即,除非另有说明,或从上下文中清楚,“x包括a或b”旨在表示任何自然包含性排列。也就是说,如果x包括a;x包括b;或x包括a和b,则在上述任何一种情况下都满足“x包括a或b”。此外,除非另有说明或从上下文清楚指向单数形式,否则本技术和所附权利要求中使用的冠词“一(a)”和“一个(an)”通常可被解释为表示“一个或多个”。此外,始终使用术语“实现”或“一个实现”或“实施例”或“一个实施例”等并不旨在表示相同的实现或实施例,除非如此描述。这里描述的一个或多个实现或实施例可以在特定实现或实施例中组合。这里使用的术语“第一”、“第二”、“第三”、“第四”等意在作为区分不同元素的标签,并且可能不一定具有按照它们的数字指定的顺序含义。
[0128]
应当理解,以上描述旨在是说明性的,而不是限制性的。在阅读和理解以上描述后,其他实施例对于本领域技术人员来说将是显而易见的。因此,可以参考所附权利要求以及这些权利要求所授权的等效物的完整范围来确定本公开的范围。
[0129]
在另外的实施例中,公开了用于执行上述实施例的操作的一个或多个处理设备。此外,在本公开的实施例中,非暂时性计算机可读存储介质存储用于执行所描述的实施例的操作的指令。同样在其他实施例中,还公开了用于执行所描述的实施例的操作的系统。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1