scala - 在 Spark GraphX 中寻找最大边权重

标签 scala apache-spark spark-graphx

假设我有一个边属性双值的图,我
想找到我的图的最大边权重。如果我这样做:

val max = sc.accumulator(0.0) //max holds the maximum edge weight
g.edges.distinct.collect.foreach{ e => if (e.attr > max.value) max.value
= e.attr }

我想问一下在master上做了多少工作,在master上做了多少
执行者,因为我知道 collect() 方法将整个 RDD 带到
大师?是否发生并行?有没有更好的办法找到
最大边缘重量?

笔记:
g.edges.distinct.foreach{ e => if (e.attr > max.value) max.value =
e.attr } // does not work without the collect() method.
//I use an accumulator because I want to use the max edge weight later

如果我想对两个图之间具有相同 srcId 和 dstId 的边的属性应用一些平均函数,最好的方法是什么?

最佳答案

您可以聚合:

graph.edges.aggregate(Double.NegativeInfinity)(
  (m, e) => e.attr.max(m),
  (m1, m2) => m1.max(m2)
)

或映射并取最大值:
 graph.edges.map(_.attr).max

关于你的尝试:
  • 如果您收集的所有数据都在驱动程序上按顺序处理,则没有理由使用 accumulator .
  • 它不起作用,因为从工作人员的角度来看,累加器是只写的。
  • 关于scala - 在 Spark GraphX 中寻找最大边权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32267199/

    相关文章:

    scala - 在groupBy之后获得前N名,并将其视为RDD

    java - 如何使用 BigQuery 连接器从 java Spark 读取 BigQuery 表

    sql - PySpark 数据框的每日预测

    apache-spark - Spark 图上的 Gremlin 遍历查询

    scala - Scala 重载方法有什么问题

    scala - Apache Spark 中的大型 RDD [MatrixEntry] 超出了 GC 开销限制

    Scala - 将 RDD 转换为 map

    mysql - 在连接到mysql RDS时启动Hive 3.1 Metastore错误

    apache-spark - GraphX 不适用于相对较大的图形

    scala - 如何使用Spark graph的函数mask?