在Apache Spark GraphX中使用PartitionStrategy对图形进行分区之后,是否有人尝试过运行图形算法(例如Triangle Counting)?我想知道为什么与Apache Spark GraphX中来自RandomVertexCut的分区图相比,HDRF(高次复制值)算法在分区图中的三角计数算法的运行时执行效果更差?
因此,除了Spark实现(我使用C ++实现)之外,我还制作了HDRF算法,然后程序接收到一个边缘列表,并且对于每个边缘,它返回具有分区号的边缘。然后在Spark的PartitionStrategy类中,我做了一个新的实现,该实现只返回分区的数量以及每个边缘。然后,我尝试从Spark GraphX运行Triangle Counting算法,比较了使用HDRF和RandomVertexCut进行分区的图形的运行时间,结果表明,与RandomVertexCut相比,HDRF算法上Triangle Counting算法的运行速度较慢。
我有点困惑,因为在本文http://midlab.dis.uniroma1.it/articoli/PQDKI15CIKM.pdf中,有人指出HDRF使图算法运行得更快。我意识到在本文中,他们使用了GraphLab而不是GraphX。我想知道图形处理引擎的环境差异是否会导致差异结果。
这是HDRF算法生成的边缘列表文件中的示例边缘:
1 2 0
2 3 1
NB:1 2 0,表示边(1,2)放置在分区0中。
在这里,我将在PartitionStrategy.scala中显示一些代码
case object HDRF extends PartitionStrategy {
override def getPartition(src: VertexId, dst: VertexId, numParts: PartitionID): PartitionID = {
numParts
}
}
因此,在输入getPartition方法后,它将立即返回分区的数量以及边缘(例如,边缘1 2 0将从getPartition方法返回0)
我希望与RandomVertexCut相比,使用HDRF算法对图形进行分区后,三角计数算法的运行时执行量会减少,但实际上执行起来会更差。
有什么想法为什么会在Apache Spark GraphX中发生而不是在GraphLab中发生吗?