scala 关于如何使用GraphX的建议(以下描述中的用例)

ax6ht2ek  于 2023-08-05  发布在  Scala
关注(0)|答案(1)|浏览(120)

我有一个数据集,其中每行有三个特征<src,dest,traceID>。该行表示单条边(从源到目标)及其所属轨迹的ID。请注意,这些跟踪是从Jaeger等可观察性工具收集的微服务调用。因此,可能存在多个迹线(具有不同的迹线ID)但具有相同的边缘连接。我想实现以下目标:1.将每条轨迹分别解析成一个图。2.具有相同结构的群图。3.从每个组中转储一个代表性的图形,以及该图形在我的数据集中出现的计数。请注意,我有200万个这样的图(每个图中的平均节点数为15)。GraphX适合解决这样的问题吗?
我目前正在将其解析为边缘RDD,但我不确定如何分别解析每个图。我应该为每个图形设置多个图形对象吗?

wpx232ag

wpx232ag1#

对于你想要的,有很多GraphX IMO中没有的功能。
为了解决我工作中遇到的类似问题,我开发了一个名为splink_graph的Pyspark包,它可以在Spark集群环境中处理您想要实现的任务。
首先,我将定义我将如何处理这个问题的方式。
1.在一个结构中得到所有的边缘是适当的
1.执行连接组件,以确定可以从您拥有的边集创建的不连接图的结果子图的组成
1.找到一种方法来识别相似的图形
1.按图类分组计数
虽然您可能会使用GraphX(GraphX文档链接中的连接组件)执行前两个步骤,但它无法开箱即用地处理后两个步骤。
使用splink_graph,您可以:

  • 将边列表加载到 Dataframe 中。
  • 执行连接组件算法,利用GraphFrames进行可扩展操作。
  • 使用splink_graph提供的weisfeiler-lehman graphhash功能进行快速图同构测试,这符合您在图论术语中所寻求的内容。
  • 执行group_by(graphhash).count()操作,以获得您所拥有的图形类型的数字。

通过遵循这种方法,你应该能够完成你正在寻求做的事情。
当然,我建议的是基于Python/Pyspark的,而不是Scala。如果这是一个问题,我建议在Scala/Spark中实现连接组件的函数& weisfeiler-lehman图散列功能

相关问题