apache-spark - 如何在 GraphX 的聚合消息中使用组合器
问题描述
在 GraphX 聚合消息 API
class Graph[VD, ED] {
def aggregateMessages[Msg: ClassTag](
sendMsg: EdgeContext[VD, ED, Msg] => Unit,
mergeMsg: (Msg, Msg) => Msg,
tripletFields: TripletFields = TripletFields.All)
: VertexRDD[Msg]
}
但是我想修改合并阶段的返回类型,这意味着我想要类似的东西,combineByKey
而不是reduceByKey
,我该如何基于 GraphX 的优势来做到这一点?或者换句话说,我怎么能只使用这个函数的结果sendMsg
并跳过mergeMsg
这个函数的阶段?
我的意思是 GraphX 的优点是“以顶点为中心”,如果我使用它map
并combineByKey
运行它会进行全局洗牌,这会花费大量时间,与“以顶点为中心”的想法背道而驰
解决方案
collectEdges
in GraphOps
API 可能会有所帮助。
它收集每个顶点的相邻边并可以返回一个VertexRDD[Array[Edge[ED]]]
类型,这意味着它会同时更改返回类型并收集消息,请参阅API 文档
推荐阅读
- swift - 为什么IOS13用facebook登录不起作用?
- java - 正则表达式捕获:仅从第二组获取结果
- java - SQL Sum Query 在 PHPmyAdmin 中有效,但在 Java resutset 中无效
- javascript - 无法推进道具“历史”
- reactjs - useEffect 重新渲染太多次
- c# - 当复选框应显示为 1 时,数据库显示全 0
- excel - 使用字符串和整数的 Excel VBA 自动筛选错误消息
- java - 为什么hashmap拆分方法需要在loHead.treeify(tab)之前判断if (hiHead!= Null)
- python - 无法使用 powershell 执行 jupyter notebook。我该如何解决?
- java - 为什么JavaFX不能和.jar文件一起打包?