Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala spark graphx是否找到最活跃的用户?_Scala_Apache Spark_Spark Graphx - Fatal编程技术网

Scala spark graphx是否找到最活跃的用户?

Scala spark graphx是否找到最活跃的用户?,scala,apache-spark,spark-graphx,Scala,Apache Spark,Spark Graphx,我有一张这种形式的图表: _ 3 _ /' '\ (1) (1) / \ 1--(2)--->2 我想统计最活跃的用户(跟踪最多的用户,这里是用户1,跟踪两次用户2和一次用户3)。 我的图是这种形式的图[Int,Int] val edges = Array(Edge(1,10,1), Edge(10,1,1), Edge(11,1,1), Edge(1,11,1), Edge(1,12,1)) val vertices = Array((1

我有一张这种形式的图表:

   _ 3 _
   /' '\
 (1)   (1)
 /       \
1--(2)--->2
我想统计最活跃的用户(跟踪最多的用户,这里是用户1,跟踪两次用户2和一次用户3)。 我的图是这种形式的图[Int,Int]

val edges = Array(Edge(1,10,1), Edge(10,1,1), Edge(11,1,1), Edge(1,11,1), Edge(1,12,1))        
val vertices = Array((12L,12), (10L,10), (11L,11), (1L,1))
val graph = Graph(sc.parallelize(vertices),sc.parallelize(edges),0)
我的想法是使用对边的srcId进行分组,使用迭代器进行计数,然后进行排序,但我在使用迭代器时遇到了一些问题,类型非常复杂:

graph.edges.groupBy(u.dstId).collect()具有以下类型:

数组[(org.apache.spark.graphx.VertexId,Iterable[org.apache.spark.graphx.Edge[Int]]]


有什么想法吗?

您通过
srcId
进行分组的想法很好,因为您要查找的是跟在后面的关系,而不是跟在后面的关系(顺便说一下,您的示例使用了
dstId

组现在包含每个顶点之外的边。现在,我们可以求属性之和,以获得用户跟随任何用户的总时间

val followCount = group.map{
  case (vertex, edges) => (vertex, edges.map(_.attr).sum)
}.collect
产生

Array((10,1), (11,1), (1,3))
现在,如果您想提取跟随最多的用户,您可以简单地按降序对其进行排序,并取列表的开头,这将给出最活跃的用户

val mostActiveUser = followCount.sortBy(- _._2).head

你能和我们分享一些代码吗?如何构建图形?
val mostActiveUser = followCount.sortBy(- _._2).head