我正在处理一个大图(3M 节点和节点之间的 1B 关系)。我有两种类型的节点,类别和用户。例如,我想使用 spark 来分析图形数据以执行类别之间的路径分析。
但我有以下询问是否有人可以提供帮助:
1)我需要加载整个图表来对火花进行分析吗?所以我尝试graphframes
使用以下scala代码将节点列表和边缘加载到spark中
val nodesQuery="match (n:category) RETURN id(n) as id,n.userid as user_id,n.catid as cat_id limit UNION ALL MATCH (n:user) RETURN id(n) as id,n.userid as user_id,n.catid as cat_id limit"
val relsQuery="match (p:category) optional match (p:category)-[r]-(n:user) return id(p) as src,id(n) as dst, type(r) as value val graphFrame = neo.nodes(nodesQuery,Map.empty).rels(relsQuery,Map.empty).loadGraphFrame"
与此有关的第一个问题我在节点列表中为用户节点获取空值也发生内存溢出,对此有什么建议吗?
我决定使用的GraphFrames
原因是查询应该是优化的,但是使用 RDD 我可以批量加载数据
3)使用如下密码对此数据执行距离分析(我需要测量两个类别之间的距离)有哪些可能的建议:
MATCH path=(cat1:category{catid:'1900'}) -[rel1:INTERESTED_IN] -(user1:user) -[rel2:INTERESTED_IN*2..3] -(cat2:category{catid:'1700'}) return cat1,path,cat2,rel1
4)会通过AggregateMessages
帮助使用消息传递吗?我还需要将整个图表加载到火花中吗?