我正在使用大图(3M节点和节点之间的1B关系)。我有两种类型的节点,类别和用户。 我想使用spark来分析图表数据,以便在类别之间执行路径分析。
但我有以下询问是否有人可以提供帮助:
1)我是否需要加载整个图表来对spark进行分析?所以我尝试使用以下scala代码
将节点列表和边缘加载到sparkgraphframes
中
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
帮助传递消息?我还需要将整个图表加载到spark吗?