我有一个数据集,其中每行有三个特征<src,dest,traceID>。该行表示单条边(从源到目标)及其所属轨迹的ID。请注意,这些跟踪是从Jaeger等可观察性工具收集的微服务调用。因此,可能存在多个迹线(具有不同的迹线ID)但具有相同的边缘连接。我想实现以下目标:1.将每条轨迹分别解析成一个图。2.具有相同结构的群图。3.从每个组中转储一个代表性的图形,以及该图形在我的数据集中出现的计数。请注意,我有200万个这样的图(每个图中的平均节点数为15)。GraphX适合解决这样的问题吗?
我目前正在将其解析为边缘RDD,但我不确定如何分别解析每个图。我应该为每个图形设置多个图形对象吗?
1条答案
按热度按时间wpx232ag1#
对于你想要的,有很多GraphX IMO中没有的功能。
为了解决我工作中遇到的类似问题,我开发了一个名为splink_graph的Pyspark包,它可以在Spark集群环境中处理您想要实现的任务。
首先,我将定义我将如何处理这个问题的方式。
1.在一个结构中得到所有的边缘是适当的
1.执行连接组件,以确定可以从您拥有的边集创建的不连接图的结果子图的组成
1.找到一种方法来识别相似的图形
1.按图类分组计数
虽然您可能会使用GraphX(GraphX文档链接中的连接组件)执行前两个步骤,但它无法开箱即用地处理后两个步骤。
使用splink_graph,您可以:
通过遵循这种方法,你应该能够完成你正在寻求做的事情。
当然,我建议的是基于Python/Pyspark的,而不是Scala。如果这是一个问题,我建议在Scala/Spark中实现连接组件的函数& weisfeiler-lehman图散列功能