graphxmongodb aggregateemessages是迭代执行的吗

用Apache&Spark进行大数据处理&-&第六部分:&用Spark&GraphX进分析
用Apache Spark GraphX库进行图
图类算法,如PageRank、Connected Components和Triangle Counting
Spark GraphX组件和API
Spark GraphX应用举例
这是“用Apache
Spark进行大数据处理”系列文章的第六篇。其他文章请参考:第一部分:介绍,&第二部分:Spark
SQL&,&第三部分:Spark
Streaming&,&第四部分:Spark Machine
Learning&,&第五部分:Spark ML Data
Pipelines&。
呈现出不同的形态和大小。它可以是批处理数据,也可以是实时数据流;对前者需要离线处理,需要较多的时间来处理大量的数据行,产生结果和有洞察力的见解,而对后者需要实时处理并几乎同时生成对数据的见解。
我们已经了解了如何将Apache Spark应用于处理批数据(Spark Core)以及处理实时数据(Spark
Streaming)。
有时候,所需处理的数据是很自然地联系在一起的。譬如,在社交媒体应用中,有Users、Articles和Likes等实体,需要把它们当作一个单独的数据逻辑单元来管理和处理。这类数据被称为图数据(&Graph
data&)。与传统的数据处理相比,对图数据进行分析要用到不同类型的技术和方法。
在该系列文章的前几篇文章中,我们从第一篇文章“Spark介绍”开始,学习了Apache
Spark框架和用于大数据处理的多种库;然后了解了Spark SQL库、Spark Streaming,以及两个机器学习包:Spark
MLlib 和Spark ML。
在这最后一部分,我们将聚焦于如何处理图数据和学习Spark中的图数据分析库&GraphX&。
首先,让我们来看看什么是图数据,并了解在企业大数据应用中处理这类数据为何如此关键。
当我们讨论图数据相关的技术时,涵盖了三种不同的主题:
图数据分析
下面我们简单地讨论一下这些主题,了解它们之间的区别、以及它们如何相互补充以帮助大家开发一个完整的基于图的大数据处理分析软件架构。
与传统的数据模型相比,在图数据模型中,数据实体以及实体之间的关系是核心元素。当使用图数据时,我们对实体和实体之间的联系更感兴趣。
举一个例子,如果我们有一个社交网络应用程序,我们会对某个特定用户(譬如John)的细节感兴趣,但我们也会想对这个用户与网络中其他用户之间的关联进行建模、提取和存储。这种关联的例子有“John是Mike的朋友”
或者 “John读过Bob写的一本书”。
要记住的很重要的一点是,我们在实际应用中所用到的图数据是随着时间动态变化的。
图数据库的优点在于,它能揭示一些模式,而传统的数据模型和分析方法通常很难找出这些模式。
如果没有图数据库,实现一个像“找出共同的朋友”这样的用户案例,如这篇&所描述的那样,用复杂的join和查询条件从所有数据表的数据中进行查询是很耗费资源的。
图数据建模
图数据建模包括定义节点(也被称作顶点)、关系(也被称作边)以及这些节点和关系的标签。
图数据库是基于Jim
Webber的查询驱动建模(、)而构建的,数据模型不仅仅对数据库技术人员开放,也对领域专家开放,它能支持团队在建模和模型演化上的合作。
图数据库产品通常包括一个查询语言(如Cypher是Neo4j中的查询语言)来管理存储在数据库中的图数据。
图数据处理
图数据处理主要包括:先通过图的遍历来找到匹配特定模式的节点,然后定位相关节点和关系,这样我们可以看到不同实体之间的关系的模式。
数据处理管道通常包括以下步骤:
数据预处理 (包括导入、变换和过滤)
一个典型的图分析工具应该可以灵活地处理图数据和集合数据,如此,我们就可以将不同的数据分析工作(如ETL,探索式分析和迭代的图计算)结合在一个单独的系统中,而不必使用不同的框架和工具。
有好几种框架可以处理图数据和在数据上运行预测分析、
在该文中,我们将聚焦于用Spark GraphX来分析图数据。
Gelly的框架文档中也提到了几种不同的&图生成器&,譬如Cycle
Graph、Grid Graph、ypercube Graph、Path Graph和Star Graph。
图数据可视化
一旦我们开始将相连接的数据保存到图数据库并在图数据上运行分析,我们需要一些工具来可视化在这些数据实体之间的关系模式。
没有数据可视化工具,图数据分析就不完整。
在很多情况下,图数据库比关系型数据库或其他NoSQL数据存储更加适合用于管理数据。下面给出了一些使用场景。
推荐和个性化(Recommendations and
Personalization)&:图分析可以用于生成客户模型,从数据分析中发现有洞察力的见解并用于作出关键的决策。这有助于企业有效地影响客户去购买它们的产品。这种分析也有助于制定市场策略和改进客户服务行为。
欺诈检测(Fraud
Detection)&:在支付处理应用中,基于包括用户(users)、产品(products)、交易(transactions)和事件(events)等实体的连接数据,图数据解决方案可以帮助找出&欺诈性的交易&。&这里有一篇文章&描述了一个如何用Spark
GraphX进行欺诈分析的测试应用,它将PageRank算法应用在电话通信的元数据上。
主题建模(Topic
Modeling)&:它包括对文档聚类和从文档数据中提取主题描述的技术。
社区检测(Community
Detection)&:阿里巴巴网站使用图分析技术,如&社区检测&,来解决电子商务问题。
飞行性能(Flight
Performance)&:其他用户案例包括如&这篇文章&所讨论的准点飞行性能,分析以图结构所表示的飞行性能数据,找出统计数据,如机场排名和城市间的最短路径。
最短路径(Shortest
Distance)&:&最短距离和道路&在社交网络应用中也很有用。它们可被用于衡量网络中一个特定用户的相关度。最短路径越小,用户越相关。
Spark GraphX
GraphX&是Apache Spark用于图和图并行计算的API。它扩展了Spark
RDD,引入了一个新的图抽象:&有向多图(directed
multigraph)&,每个节点和边都有自己的属性。
GraphX库提供了图算子(operator)来转换图数据,如subgraph、joinVertices和aggregateMessages。它提供了几种方法来从RDD或硬盘上的一堆节点和边中来构建一个图。它也提供了许多图算法和构造方法来进行图分析。我们将在后面讨论图算法。
图1展示了Apache Spark生态系统以及GraphX与其他库在整个框架中的关系。
<img STYLE="HeiGHT: auto" ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="/upload/.jpg" DATA-KE-SRC="/upload/.jpg"
TITLE="用Apache&Spark进行大数据处理&-&第六部分:&用Spark&GraphX进分析" />
图1. Spark生态系统和GraphX库
通过内嵌的算子和算法,GraphX使得在图数据上运行分析变得更加容易。它还允许用户cache和uncache图数据,以在多次调用图的时候避免出现重复计算。
表1中列出了GraphX中的一些图算子。
numVertices
outDegrees
mapVertices
mapTriplets
groupEdges
joinVertices
outerJoinVertices
表1:Spark GraphX的图算子
在应用样例章节,当我们在不同的社交网络数据集上运行GraphX算法时,我们将详细讨论这些算子。
GraphFrames
&是Spark图数据处理工具集的一个新工具,它将模式匹配和图算法等特征与Spark
SQL整合在一起。节点和边被表示为DataFrames,而不是RDD对象。
GraphFrames简化了图数据分析管道,优化了对图数据和关系数据的查询。与基于RDD的图处理相比,GraphFrames有下列优势:
在Scala API之外,还支持Python和Java。我们现在可以在这三门语言中使用GraphX算法。
用Spark SQL和DataFrames获得更高级的查询能力。Graph-aware query
planner使用物化视图来提高查询性能。我们也可以用Parquet、JSON和CSV等格式来存储和导入图。
网站&&以GraphX插件的形式提供了可用的GraphFrames。这里有一篇&展示了如何使用GraphFrames来计算图数据集中每个节点的PageRank。
图分析算法
图算法能帮助在图数据集上执行分析,而不用自己实现这些算法。下面给出了一些算法,来帮助找出图中的模式。
Connected components
Label propagation
Strongly connected components
Triangle count
Single-Source-Shortest-Paths
Community Detection
GraphX中已经包含了一些预构造的图算法来进行图数据处理和分析工作。这些算法在org.apache.spark.graphx.lib包中。调用这些算法很简单,就像从Graph类中调用一个方法一样简单。
图2展示了如何在GraphX API之上构建不同的图算法。
<img STYLE="HeiGHT: auto" ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="/upload/.jpg" DATA-KE-SRC="/upload/.jpg"
TITLE="用Apache&Spark进行大数据处理&-&第六部分:&用Spark&GraphX进分析" />
图2. Spark GraphX库中的图算法
在此文中,我们将详细地介绍PageRank、Connected Components和Triangle Count等算法。
PageRank算法被用于确定图数据集中的一个对象的相关重要程度。它衡量图中每个节点的重要性,假设从其他节点到该节点的边代表着认可(endorsement)。
PageRank的一个经典例子就是Google的搜索引擎。基于有多少网页引用某个网页,Google使用PageRank来计算该网页的重要程度。
另一个例子是社交网络网站,如Twitter。如果一个Twitter用户被许多其他用户关注,那么该用户在网络中有较高的影响力。这种度量指标可被用于对关注者进行广告投放(100,000个用户关注一个厨师=&
很可能是食物爱好者)。
GraphX提供了两种Pageank的实现方法:静态的和动态的。
静态PageRank:该算法迭代运行固定的次数,对图数据中的某给定节点集生成PageRank值。
动态PageRank:该算法运行直至PageRank值收敛到一个预定义的误差容忍值。
Connected Components
图中的一个Connected
Component就是一个连接的子图,其中,两个节点由边互相连接,并且子图中没有其他节点。也就是说,当两个节点之间存在关系时,这两个节点属于同一个Connected
Component。子图中具有最低数值节点的ID被用于标记Connected
Component。在社交网络例子中,可用Connected Component来创建图中的类(cluster)。
计算connected components时,有两种图遍历方法:
图数据处理中还有另外一个算法叫做&&(SCC)。如果图中每个节点都可到达所有的节点,那么这个图是强连接的。
Triangle Counting
counting是一种社区分析算法,它被用于确定经过图中每个节点的三角形的数量。如果一个节点有两个相邻节点而且这两个相邻节点之间有一条边,那么该节点是三角形的一部分。三角形是一个三节点的子图,其中每两个节点是相连的。Triangle
counting算法返回一个图对象,我们可以从它上面提取节点。
counting被大量地用于社交网络分析中。它提供了衡量图数据聚类分析的方法,这对在社交网站(如LinkedIn或Facebook)中寻找社区和度量区域群落的粘度很有用。&&是社交网络中的一个重要的度量标准,它显示了一个节点周围的社区之间的紧密程度。
Triangle Counting算法的其他用户案例有垃圾邮件检测和连接推荐。
与其他图算法相比,Triangle
counting涉及大量的信息和复杂耗时的计算。因此,当你测试该算法时,确保你在性能较好的机器上运行Spark程序。需要注意的是,PageRank衡量相关度,而Triangle
counting衡量聚类结果。
在此文中,目前我们已经了解了什么是图数据,以及为什么对不同的结构而言图分析是数据处理项目的一个重要部分。现在我们来看看使用图算法的应用例子。
我们用到的数据集来自于不同的社交网络网站,如Facebook、LiveJournal和YouTube。这些应用都含有连接数据,是很好的数据分析资源。
有篇&&中讨论了一些GraphX样例来比较几种图处理工具,我们在这里所用到的案例正是基于那些例子。
在我们的应用样例中用到一些用户案例,它们的主要目标在于确定图数据的统计数据,譬如:
在社交网络中,不同用户的受欢迎程度如何(PageRank)
基于网络中的用户连接来对用户分群(Connected Components)
社区发现和对社交网络中的用户社区的粘度分析(Triangle Counting)
在我们的代码例子中,我们将用到四种不同的数据集来运行Spark GraphX程序。这些数据集可以从斯坦福大学的SNAP
(Stanford Network Analysis Project)&&找到。如果你想下载这些数据集,将它们拷贝到应用样例主目录的数据文件夹中。
在应用样例中,我们将用到以下三种算法。
PageRank on YouTube
Connected Components on LiveJournal
Triangle Counting on Facebook
下面这张表格中展示了用户案例以及图数据处理程序中所用到的数据集和算法。
如果你重命名了这些文件,将它们拷贝到项目主目录下的“data”子目录中。表2:Spark
GraphX用例中所用到的数据集和算法
在图分析代码示例中,我们将会用到下列技术:
Apache Spark
表3:用例中所用到的技术和其版本
我们将用&&编程语言来写Spark
GraphX代码,用&命令行工具来运行这些程序。这是验证程序结果的最快的方式。不需要额外的代码编译和构建步骤。
在查看这些代码之前,这些程序以zip文件的形式与此文一起提供,你可以下载并在你自己的开发环境中尝试。
现在我们来仔细看看每一个GraphX程序例子。
首先,我们在&&上运行PageRank。该数据集包括了真实的社区信息,基本上是用户所定义的其他用户可加入的群组。
import org.apache.spark._ import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD import
// 计算图中边和节点等信息 val vertexCount = graph.numVertices val vertices = graph.vertices
vertices.count() val edgeCount = graph.numEdges val edges = graph.edges
edges.count() // // 现在来看看某些Spark GraphX API,如triplets、indegrees和outdegrees。 // val triplets = graph.triplets
triplets.count()
triplets.take(5) val inDegrees = graph.inDegrees
inDegrees.collect() val outDegrees = graph.outDegrees
outDegrees.collect() val degrees = graph.degrees
degrees.collect() // 用迭代次数作为参数 val staticPageRank = graph.staticPageRank(10)
staticPageRank.vertices.collect() Calendar.getInstance().getTime() val pageRank = graph.pageRank(0.001).vertices Calendar.getInstance().getTime() // 输出结果中前5个元素 println(pageRank.top(5).mkString("\n"))
上述代码中,变量“sc”是SparkContext,当你从Spark Shell运行程序时该变量已经可用了。
下面我们来看看在&&上运行Connected
Components的代码。该数据集包括在网站上注册并有个人和群组博客帖子的用户。该网站还允许用户识别朋友用户。
Connected Components:
import org.apache.spark._ import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD import
val cc = graph.connectedComponents() Calendar.getInstance().getTime()
cc.vertices.collect() // 输出结果中前5个元素 println(cc.vertices.take(5).mkString("\n"))
val scc = graph.stronglyConnectedComponents()
scc.vertices.collect()
最后是在&&数据上计算Triangle
Counting的Spark程序,依旧用的Scala。该数据集包括Facebook上的朋友列表,信息包括user
profiles,circles和ego networks。
Triangle Counting:
import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD
val graph = GraphLoader.edgeListFile(sc,"data/triangle-count-fb-data.txt") println("Number of vertices : " + graph.vertices.count()) println("Number of edges : " + graph.edges.count())
graph.vertices.foreach(v =& println(v))
val tc = graph.triangleCount()
tc.vertices.collect println("tc: " + tc.vertices.take(5).mkString("\n")); // println("Triangle counts: " + graph.connectedComponents.triangleCount().vertices.collect().mkString("\n")); println("Triangle counts: " + graph.connectedComponents.triangleCount().vertices.top(5).mkString("\n"));
val sum = tc.vertices.map(a =& a._2).reduce((a, b) =& a + b)
图数据处理和分析在预测分析和推荐引擎解决方案中能获取有洞察力的见解,并对员工、客户和用户提供服务。随着连接数据在商业组织、政府部门和社交媒体网络公司的逐渐增长,图数据处理和分析在这些应用中只会变得更加关键。
这篇文章表明,&&是满足图数据处理需求的很好的选择。它提供了一种统一的数据处理算法和解决方案工具集,对企业内不同业务过程所产生的相互联系的数据,生成有价值的见解和预测模型。
如同我们在该系列文章中所见到的,&&框架为统一的大数据处理应用软件系统架构提供了必要的库、设施和工具。无论数据是否需要实时处理或者批处理,或者数据集是否有连接和关系,Spark使得与不同类型的数据打交道变得更加容易。当处理和分析由不同机构所创建和管理的不同类型的数据时,我们不再需要依赖于使用几种不同的框架。
如果你正在为公司寻找大数据解决方案,或者你有兴趣转型到大数据和数据科学领域,Apache Spark是一个绝佳的选择。
数据分析领军品牌云科数海(中云网胜),是中数委在福建省唯一的数据分析师培训授权中心,专注于大数据分析项目构建、企业数据分析技术内训、个人数据分析技术培训,致力于打造福建省最优秀的数据分析企业。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Spark GraphX原理介绍 - graphx-spark -
Spark GraphX原理介绍
相关推荐:e used as vertices and there's an edge if two pictures have a label in common). As far as I know, graphX partitions data to be stored on separate mach
现实应用中,数据内部可能存在较高的关联度,如图模型应用。在对这样的数据进行处理时,并行计算框架就会面临较大的挑战,会引入大量的数据连接(join)和聚合(aggregation)操作,带来大量的计算和数据迁移,严重消耗集群资源,因此对此类算法的优化就显得极为重要。
互联网上网页权值计算的PageRank算法是一个典型的图模型问题,它依据网页之间的链接指向关系来判断网页的重要性,指向一个网页的链接数越多,相应的网页就越重要。PageRank算法可用图模型来处理,如图 3 (a)所示,图中顶点代表互联网上的网页,有向边代表网页之间的链接指向关系。PageRank算法首先进行网页权值的初始化,如图 3 (b)所示。接下来PageRank算法进行图迭代过程,迭代分为两步:
第一步,根据顶点权值生成边的权值,如图 3(c)所示。边的权值计算公式如下:
第二步,根据顶点权值和边的权值计算顶点新的权值,如图 3(d)所示,计算公式如下:
PageRank算法不断重复执行图的迭代过程,直至顶点的权值不再发生变化,各顶点的最终权值便是网页的重要性得分。
图计算框架针对图数据结构的特点,对数据进行更好的组织,充分挖掘图结构的特点,优化计算框架以达到较好的分布式计算性能。在目前的大数据环境下,大部分图计算框架对图的数据进行分布式存储,在图结构上进行数据的计算、传输和更新操作。通过操作图顶点的数据及与顶点相连的边上的数据,产生发送给与其相连的顶点的消息,消息通过网络或其他方式传输给指定顶点,顶点在收到消息或状态后进行更新,生成新的图数据。
GraphX简介
GraphX是构建在Spark之上的图计算框架,它使用RDD来存储图数据,并提供了实用的图操作方法。由于RDD的与生俱来的特性,GraphX高效地实现了图的分布式存储和处理,可以应用于社交网络等大规模的图计算场景。GraphX在图顶点信息和边信息存储上做了优化,使得图计算框架性能相对于原生RDD实现得以较大提升,接近或到达GraphLab等专业图计算平台的性能。GraphX最大的贡献是,在Spark之上提供一栈式数据解决方案,可以方便且高效地完成图计算的一整套流水作业。
众所周知,图结构中最基本的要素是顶点和边。GraphX描述的是拥有顶点属性和边属性的有向图。GraphX提供顶点(Vertex)、边(Edge)、边三元组(EdgeTriplet)三种视图。GraphX的各种图操作也是在这三种视图上完成的。如图 4所示,顶点包含顶点ID和顶点数据(VD);边包含源顶点ID(srcId)、目的顶点ID(dstId)和边数据(ED)。边三元组是边的扩展,它在边的基础上提供了边的源顶点数据、目的顶点数据。在许多图计算操作中,需要将边数据以及边所连接的顶点数据一起组成边三元组,然后在边三元组上进行操作。
GraphX分布式存储
GraphX将图数据以RDD分布式地存储在集群的节点上,使用顶点RDD(VertexRDD)、边RDD(EdgeRDD)存储顶点集合和边集合。
顶点RDD通过按顶点的ID进行哈希分区,将顶点数据以多分区形式分布在集群上。边RDD按指定的分区策略(Partition Strategy)进行分区(默认使用边的srcId进行哈希分区),将边数据以多分区形式分布在集群上。另外,顶点RDD中还拥有顶点到边RDD分区的路由信息——路由表。路由表存在顶点RDD的分区中,它记录分区内顶点跟所有边RDD分区的关系。在边RDD需要顶点数据时(如构造边三元组),顶点RDD会根据路由表把顶点数据发送至边RDD分区。如图 5所示,按顶点分割方法将图分解后得到顶点RDD、边RDD和路由表(注意,此处RDD未按分区函数分区)。
在图计算过程中,有些边的计算需要顶点数据,即需形成边三元组视图,如PageRank算法生出边的权值,这需要将顶点的权值发送至出边所在的边RDD分区。GraphX依据路由表,从顶点RDD中生成与边RDD分区相对应的重复顶点视图(ReplicatedVertexView),它的作用是作为中间RDD,将顶点数据传送至边RDD分区。重复顶点视图按边RDD分区并携带顶点数据的RDD,如图 6所示,顶点分区A中便携带边RDD分区A中的所有的顶点,它与边RDD中的顶点是co-partition(即分区个数相同,且分区方法相同)。在图计算时,GraphX将重复顶点视图和边RDD进行拉链(zipPartition)操作,即将重复顶点视图和边RDD的分区一一对应地组合起来,从而将边与顶点数据连接起来,使边分区拥有顶点数据。整个形成边三元组过程,只有在顶点RDD形成重复顶点视图中存在分区间数据移动,拉链操作不需要移动顶点数据和边数据。由于顶点数据一般比边数据要少的多,而且随着迭代次数的增加,需要更新的顶点数目也越来越少,重复顶点视图中携带的顶点数据也相应减少,这样就可以大大减少数据的移动量,加快执行速度。
GraphX在顶点RDD和边RDD的分区中以数组形式存储顶点数据和边数据,目的是为了不损失元素访问性能。GraphX在分区里建立了众多索引结构,高效地实现快速访问顶点数据或边数据。在迭代过程中,图的结构不会发生变化,因而顶点RDD、边RDD以及重复顶点视图中的索引结构全部可以重用,当由一个图生成另一个图时,只须更新顶点RDD和RDD的数据存储数组。索引结构的重用,是GraphX保持高性能的关键,也是相对于原生RDD实现图模型性能能够大幅提高的主要原因。
相关推荐:随着大数据的发展,人们对大数据的处理要求也越来越高,原有的批处理框架MapReduce适合离线计算,却无法满足实时性要求较高的业务,如实时推荐、用户行为分析等
GraphX功能简介
GraphX对Spark RDD进行了封装,用类来表示图模型,它提供了一些基础的图操作方法。除此之外,GraphX还实现了一些常用的图算法模型,如相邻顶点收集算法、图中三角形统计算法、PageRank算法、pregel图计算框架等等。GraphX提供的这些基础的图操作方法和现成的图算法模型使得用户在Spark上编写图应用程序变得非常容易。
这里介绍一些重要的GraphX图操作方法。
1. mapEdges
返回按用户提供函数改变图中边数据的值或类型之后的图。
2. mapVertices
返回按用户提供函数改变图中顶点数据的值或类型之后的图。
3. outerJoinVertices
返回依据用户提供的顶点数据和函数改变图中顶点数据的值或类型之后的图。
返回和另外一个图公共顶点和边组成的图。
5. subgraph
返回按用户提供函数进行顶点和边过滤的图。
6. aggregateMessages
aggregateMessages是GraphX最重要的图操作方法,它主要用来高效解决相邻边或相邻顶点之间的通信问题,如:将与顶点相邻的边或顶点的数据聚集在顶点上、将顶点数据散发在相邻边上。aggregateMessages方法能够简单、高效地解决PageRank等图迭代应用。
aggregateMessages在逻辑上分为三步:(1)由边三元组生成消息;(2)向边三元组的顶点发送消息;(3)顶点聚合收到的消息。它实现分为map阶段和reduce阶段。
1) aggregateMessages map
GraphX使用顶点RDD更新重复顶点视图。重复顶点视图与边RDD进行分区拉链(zipPartitions)操作,将顶点数据传往边RDD分区,实现边三元组视图。
对边RDD进行map操作,依据用户提供的函数为每个边三元组产生一个消息(Msg),生成以顶点ID、消息为元素的RDD,其类型为RDD[(VertexId, Msg)]。
2) aggregateMessages reduce
reduce阶段首先对1)中的消息RDD按顶点分区方式进行分区(使用顶点RDD的分区函数),分区后的消息RDD与该图的顶点RDD元素分布状况将完全相同。在分区时,GraphX会使用用户提供的聚合函数合并相同顶点的消息,最终形成类似顶点RDD的消息RDD。
应用程序中,一般会用消息RDD数据更新Graph对象的顶点RDD,进行下一轮迭代。
唐黎哲,国防科学技术大学 并行与分布式计算国家重点实验室(PDL)硕士,从事spark、图计算、LDA(主题分类)研究,欢迎交流,请多指教。
相关推荐:I want to create. I need to create a RDD object [(VertexId, String)] which are going to be the nodes for my future graph, where VertexId for each node
背景 现实应用中,数据内部可能存在较高的关联度,如图模型应用。在对这样的数据进行处理时,并行计算框架就会面临较大的挑战,会引入大量的数据连接(join)和聚合(aggregation)操作,带来大
相关阅读排行
相关内容推荐
请激活账号
为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。
您的注册邮箱:
如果您没有收到激活邮件,请注意检查垃圾箱。}

我要回帖

更多关于 aggregate demand 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信