自定义spark GraphX中的collectNeighborIds方法

/**  * 自定义收集VertexId的neighborIds  * @author TongXueQiang  */def collectNeighborIds[T,U](edgeDirection:EdgeDirection,graph:Graph[T,U])(implicit m:scala.reflect.ClassTag[T],n:scala.reflect.ClassTag[U]):VertexRDD[Array[VertexId]] = {  val nbrs = graph.mapReduceTriplets[Array[VertexId]](    //map函数    edgeTriplets => {      val msgTosrc = (edgeTriplets.srcId,Array(edgeTriplets.dstId));      val msgTodst = (edgeTriplets.dstId,Array(edgeTriplets.srcId));      edgeDirection match {        case EdgeDirection.Either =>Iterator(msgTosrc,msgTodst)        case EdgeDirection.Out => Iterator(msgTosrc)        case EdgeDirection.In => Iterator(msgTodst)        case EdgeDirection.Both =>  throw new SparkException("It doesn‘t make sense to collect neighbors without a " + "direction.(EdgeDirection.Both is not supported.use EdgeDirection.Either instead.)")      }    },_ ++ _)//reduce函数  nbrs}测试:object Test {  
  System.setProperty("hadoop.home.dir","D://hadoop-2.6.2");  val conf = new SparkConf().setMaster("local").setAppName("SparkGraph");  val sc = new SparkContext(conf);
  def main(args:Array[String]):Unit = {    val graph = GraphGenerators.logNormalGraph(sc,numVertices = 100).map((id,_) => id.toDouble);
    collectNeighborIds(EdgeDirection.In,graph).foreach(line => {print(line._1+":"); for (elem <- line._2) {print(elem + " ")};println;});
}

}
时间: 2024-08-11 17:21:32

自定义spark GraphX中的collectNeighborIds方法的相关文章

Spark GraphX学习笔记

概述 GraphX是 Spark中用于图(如Web-Graphs and Social Networks)和图并行计算(如 PageRank and Collaborative Filtering)的API,可以认为是GraphLab(C++)和Pregel(C++)在Spark(Scala)上的重写及优化,跟其他分布式 图计算框架相比,GraphX最大的贡献是,在Spark之上提供一站式数据解决方案,可以方便且高效地完成图计算的一整套流水作业. Graphx是Spark生态中的非常重要的组件,

自定义的dialog中的EditText无法弹出输入法解决方案

1.解决无法弹出输入法: 在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有我们指定的布局,所以设置这个不会影响我们的功能,这样就可以弹出输入法了-- 2.可以弹出输入法了,但了为了增强用户体验性,当dialog中含有editText时应该,在显示dialog的同时自动弹出键盘: (1) 可以在自定义的dialog中增加如下方法: public void showKeybo

android中自定义的dialog中的EditText无法弹出输入法解决方案

1.解决无法弹出输入法: 在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有我们指定的布局,所以设置这个不会影响我们的功能,这样就可以弹出输入法了…… 2.可以弹出输入法了,但了为了增强用户体验性,当dialog中含有editText时应该,在显示dialog的同时自动弹出键盘: (1) 可以在自定义的dialog中增加如下方法: [java] view plain cop

Spark Graphx图计算案例实战之aggregateMessages求社交网络中的最大年纪追求者和平均年纪!

Spark Graphx提供了mapReduceTriplets来对图进行聚合计算,但是1.2以后不再推荐使用,源代码如下: @deprecated("use aggregateMessages", "1.2.0") def mapReduceTriplets[A: ClassTag](     mapFunc: EdgeTriplet[VD, ED] => Iterator[(VertexId, A)],     reduceFunc: (A, A) =&g

java.lang.Comparable, java.util.Compartor区别以及Hadoop中关于自定义类型中的compare方法

public interface Comparable<T> { public int compareTo(T o); } 规定了对象内部比较的方法 public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); } 定义外部比较器的基本方法,其中equals是用来确定两个比较器是否相等. 关于对象内部比较和外部比较这两个接口的区别和使用场景如下: 个人总结: Compara

Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案

如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView 的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为 false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了 我们可以通过对Item Layout的根控件设置其android:descendantFocusability="blo

Java中自定义对象使用Collections工具类中的Sort方法

Collections工具类中的sort方法有两种形式: (1) sort(List<T> list) (2) sort(List<T> list, Comparator<? super T> c) 第一种方法中List类型的对象必须实现Comparable接口,此外,List中的元素必须可比较. 我们先定义类 package com.dongye.sort; import java.util.ArrayList; import java.util.Collection

spark特殊问题 在IDEA中spark(enableHiveSupport)中使用 insert overwrite时对空表可以正常写入但是如果表不为空就会报错处理方法

在IDEA中spark(enableHiveSupport)中使用 insert overwrite时对空表可以正常写入但是如果表不为空就会报错处理方法 在网上看到不少回答都是答非所问,或者说更改Project Structre下Modules项目中的Language level 为6 - @Override in interfaces也没用 现象分析与解决方法 1.idea无法spark.sql无法正常运行insert overwrite语句原因有两个:1)mysql-connector-ja

明风:分布式图计算的平台Spark GraphX 在淘宝的实践

快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) 对于网络科学而言,世间万物都可以抽象成点,而事物之间的关系都可以抽象成边,并根据不同的应用场景,生成不同的网络,因此整个世界都可以用一个巨大的复杂网络来代表.有关复杂网络和图算法的研究,在最近的十几年取得了巨大的进展,并在多个领域有重要的应用. 作为最大的电商平台,淘宝上数亿买家和卖家,每天产生数