首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

大数据技术之_19_Spark学习_05_Spark GraphX 应用解析小结

(2)GraphX 他的底层计算也是 RDD 计算,它和 RDD 共用一种存储形态,在展示形态上可以以数据集来表示,也可以图的形式来表示。 2、Spark GraphX 有哪些抽象?...边的表示用 RDD[Edge[ED]] 来表示,Edge 用来具体表示一个边,Edge 里面包含一个 ED 类型参数来设定的属性,ED 类型中包括 一个源顶点的 ID 和一个目标顶点的 ID。...图在 Spark 中用 Graph[VD, ED] 来表示,可以通过顶点和边来构建。... RDD[(VertexId, (String, String))] = sc.parallelize(Array((3L, ("rxin", "student")), (7L, ("jgonzal",...= ((v, d) => true)) : Graph[VD, ED]   该操作返回一个当前图的子图,通过传入 epred 函数来过滤边,通过传入 vpred 函数来过滤顶点,返回满足 epred 函数值为

87531

Apache Spark 2.2.0 中文文档 - GraphX Programming Guide | ApacheCN

, String)] 扩展 RDD[(VertexId, (String, String))] ,所以我们使用 scala case表达式来解构元组。...例如,在以下代码中,我们删除了断开的链接: // Create an RDD for the vertices val users: RDD[(VertexId, (String, String))]...Caching and Uncaching 在 Spark 中,默认情况下,RDD 不会保留在内存中。...在概念上,如果我在一组顶点上构造了一个 VertexRDD[B],这是一些 RDD[(VertexId, A)] 中的顶点的超集,那么我可以重用索引来聚合然后再索引 RDD[(VertexId, A..., VertexId, ED, ED2) => ED3): EdgeRDD[ED3] 在大多数应用中,我们发现在 EdgeRDDEdgeRDD 上的操作是通过图形运算符完成的,或者依赖基 RDD 类中定义的操作

3K91
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    GraphX编程指南-官方文档-整理

    ,String)]延伸RDD[(VertexID,(String,String))],所以我们使用Scala的case表达来解构元组。...定义核心运算已优化的实现方式中定义的Graph,并且被表示为核心操作的组合定义在GraphOps。然而,由于Scala的implicits特性,GraphOps中的操作会自动作为Graph的成员。...例如,在下面的代码中,我们删除已损坏的链接: // Create an RDD for the vertices val users: RDD[(VertexId, (String, String))]...从概念上讲,如果我在一组顶点上构建了一个VertexRDD[B],这是一个在某些顶点RDD[(VertexID,A)]的超集,然后我可以重用该索引既聚集,随后为RDD[(VertexID, A)]建立索引..., VertexId, ED, ED2) => ED3): EdgeRDD[ED3, VD] 在大多数应用中,我们发现,在 EdgeRDD 中的操作是通过图形运算符来实现,或依靠在基类定义的 RDD

    4.1K42

    在美国国会图书馆标题表的SKOS上运行Apache Spark GraphX算法

    在GraphX数据结构中存储RDF 首先,正如我在前面的博客中提到的,GraphX开发目前意味着使用Scala编程语言进行代码编写,所以我一直在学习Scala。...,但尽管我也使用Scala,但我的主要关注点是在Spark GraphX数据结构中存储RDF,特别是在Scala中。...在GraphX图中存储RDF的第一步显然是将谓词存储在边RDD,并将顶点RDD中的主体和资源对象以及文字属性作为这些RDD中的额外信息,如(名称,角色)对和Spark网站的Example Property...The Example Property Graph可以将这些(名称,角色)对与顶点存储在一起,因为RDD被声明为RDD(VertexId,(String, String))。...[VertexId]]() val prefLabelMap = HashMap[VertexId, String]() def main(args: Array[String]) { val sc

    1.9K70

    GraphX图计算图处理知识图谱简单可视化核心技术

    可视化效果 编程语言 核心代码   准备在CSDN上写一个关于GraphX的专栏,这是第一篇文章。   ...本文介绍使用GraphX创建一张图并可视化的关键技术,创建好的图存储在Graph[VD,ED]对象中,可视化所使用的技术框架是第三方Java动态图形管理组件GraphStream。...可视化效果   在可视化结果中,使用标签分别在顶点和边的旁边标注了人物的姓名和人物之间的关系,如下图所示。 ? 编程语言   GraphX目前只支持Scala编程语言。..., sex:String) case class Link(relationship:String, happenDate:String) /** * create a graph from...) val links= sc.textFile(edgeFilePath) //构建边、顶点RDD val verticesRDD: RDD[(VertexId,Person)

    1.4K40

    GraphX具体功能的代码使用实例-Scala实现

    本文利用一个初始示例代码,结合部分官方文档中的说明,对GraphX的部分功能方法进行了实践,在全部亲自运行通过后,对大部分代码添加了自己的理解和认识,并且在Pregel模型编程部分结合运行结果对其运行流程做了一定梳理...{Level, Logger} import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD import org.apache.spark...{SparkConf, SparkContext} object RDD_println { def main(args: Array[String]) { //屏蔽日志 Logger.getLogger...[(Long, (String, Int))] = sc.parallelize(vertexArray) val edgeRDD: RDD[Edge[Int]] = sc.parallelize...// 然而,我们发现用户返回迭代器是昂贵的,它抑制了我们应用额外优化(例如,本地顶点的重新编号)的能 // 在 aggregateMessages 中我们引进了EdgeContext,其暴露triplet

    2.1K31

    图解Spark Graphx实现顶点关联邻接顶点的collectNeighbors函数原理

    图片 原创/朱季谦 一、场景案例 在一张社区网络里,可能需要查询出各个顶点邻接关联的顶点集合,类似查询某个人关系比较近的都有哪些人的场景。...在用Spark graphx中,通过函数collectNeighbors便可以获取到源顶点邻接顶点的数据。 下面以一个例子来说明,首先,先基于顶点集和边来创建一个Graph图。..."), Edge(7L, 8L, "friend"), Edge(8L, 9L, "friend") )) val graph = Graph(vertices, edges, null) 在成功创建图之后...在graph.aggregateMessages[Array[(VertexId, VD)]]( ctx => {......})聚合函数里,就是基于三元组去做聚合统计的。...如果某个顶点没有邻居信息(在 nbrs 中不存在对应的条目),则使用空数组来表示它的邻居。

    728110

    Nebula Storage 2.0 存储格式

    由于在 1.0 版本中,点的 ID 只能够用整型来表示,所以底层所有 VertexID 都是以 int64 来保存的。...而如果 VertexID 类型支持 string,则从占用 8 个字节的 int64 改成了固定长度的 FIXED_STRING,长度需要用户在 create space 时候指定长度。...在 storage 中,把 VertexID 都处理为 bytes,只在返回结果时根据 space 的设置不同,返回相应类型的 VertexID。...另一方面是在 1.0 的版本中,对于索引中 string 的字段的处理,实际是按变长 string 处理。因此在 LOOKUP 语句中只要使用了带 string 字段的索引,就只能使用等值查询。...而在 2.0 的版本中,索引的 string 字段和数据中的 VertexID 一样,使用固定长度的 FIXED_STRING,LOOKUP 语句中带 string 字段的索引能够使用范围查询,例如 LOOKUP

    74130

    TuGraph任务能力增强:通过API定制流图计算逻辑

    在GeaFlow中,API支持Graph API和Stream API两种类型: Graph API:Graph是GeaFlow框架的一等公民,当前GeaFlow框架提供了一套基于GraphView的图计算编程接口...在GeaFlow中支持Batch和Stream两种类型。 Batch API:批计算API,基于该类API可以进行批量计算。...其中,用户需要实现AbstractVcFunc,在compute方法中进行每一轮迭代的计算逻辑。 在本例子中,只计算了两轮迭代的结果。...在第一轮中,每个点都会向邻居点发送当前点的value值,而在第二轮中,每个点收到邻居点发送的消息,将其value值进行累加,并更新为自己的value值,即为最后的PageRank值。...- result ValueVertex(vertexId:9, value:0.2505328026562969) 可在作业详情中查看运行详情, 图片 至此,我们就成功使用Geaflow实现并运行API

    33330

    图解Spark Graphx基于connectedComponents函数实现连通图底层原理

    在NebulaGraph社区里有一篇《众安保险:NebulaGraph 在金融风控业务的实践》的文章,就提到过,在贷前的用户授信申请环节,通过NebulaGraph结合Graphx的联通分量算法Connected...文中提到曾在一张被提取出来的关系网中,计算出一个热点手机号被五六十个其他用户设置为家庭联系人手机号——这样关联数量异常的情况,往往很可能就存在团伙欺诈。...在现实生活里,这两个子图就相当某个社区里的关系网,在Spark Graphx里,经常需要处理这类关系网的操作,那么,在一个图里如何得到各个子图的数据呢?..."local[*]").setAppName("graphx") val ss = SparkSession.builder().config(conf).getOrCreate() // 创建顶点RDD...def sendMessage(edge: EdgeTriplet[VertexId, ED]): Iterator[(VertexId, VertexId)] = { //如果源顶点属性小于目标顶点属性

    47850

    GraphX 图计算实践之模式匹配抽取特定子图

    但实践过程中,我发现部分 OLAP 场景中,想实现模式匹配分析,Nebula 的支撑就显得不那么完善了。 这里我对模式匹配的解释是:在一张大图中,根据特定的规则抽取出对应的子图。...模式匹配的思路 知道 Pregel 的计算原理之后,那么怎么实现模式匹配呢,主要就是根据迭代的思想,不停地将边信息聚合到点上,在迭代的过程中控制发送消息的逻辑来实现特定模式的路径。...:[[E4],[E3,E4]],当然点 H,B,D 也有路径,但其实可以清楚的看到想要的结果是在 C,F 节点上的。...在迭代完成后,每个点上都有一些结果,他们可能是中间结果,也可能是最终结果,一般按照指定 key(一般是头结点)分组再进行一些业务逻辑的过滤(比如路径长度),即可得到指定结构的子图,接下来就可以用于业务的分析操作了...可以通过优化过滤掉不必要发送的信息来解决; 迭代的次数有限,太多了则会出现内存爆炸,不过一般业务中超过 10 层以上的情况也很少; 由于节点 ID 通常是 String,需要提前做映射表,计算完又要转换回来

    74640

    Spark SQL 字段血缘在 vivo 互联网的实践

    spark.injectParser { case (_, parser) => new ExtraSparkParser(parser) } } } 上面按照这种方式实现扩展,并在 apply 方法中把自己需要的规则注入到...因为在 DheckRule 里面是拿不到SparkPlan的我们需要对SQL再次解析拿到 SprkPlan,而FieldLineageCheckRuleV3的实现也特别简单,重要的在另一个线程实现里面。...3.4 具体的实现方法 3.4.1 得到 SparkPlan 我们在 run 方法中得到 SparkPlan: override def run(): Unit = { val parser = sparkSession.sessionState.sqlParser...7, "vertexType": "COLUMN", "vertexId": "default.tabb2.name" } ] } 四、总结 在 Spark SQL...的字段血缘实现中,我们通过其自扩展,首先拿到了 insert 语句,在我们自己的检查规则中拿到 SQL 语句,通过SparkSqlParser、Analyzer、Optimizer、SparkPlanner

    1.4K20

    Java基础提升篇:理解String 及 String.intern() 在实际中的应用

    常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。...因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量...String.intern():   再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。...()方法则可以将一个String类的保存到一个全局String表中,如果具有相同值的Unicode字符串已经在这个表中,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中...“如果我把他说的这个全局的String表理解为常量池的话,他的最后一句话,“如果在表中没有相同值的字符串,则将自己的地址注册到表中”是错的: 1String s1=new String("kvill")

    71220
    领券