深入理解GraphFrame

下面将简要介绍GraphFrame的内部结构及其执行计划和分区。

由于GraphFrame是基于Spark SQL DataFrame构建的,因此可以通过查看物理计划来理解图操作的执行,代码如下:

// 查看GraphFrame物理执行计划
g.edges.filter("salerank < 100").explain(true)

Spark将数据分割为多个分区,并在这些分区上并行执行计算。可以调整分区的级别,以提高Spark的计算效率。

在下面的示例中,将检查一个GraphFrame重新分区的结果。可以根据顶点DataFrame的列值对GraphFrame进行分区。在这里,使用group列中的值按组或产品类型进行分区,并将通过比较记录的前后分布来展示重新分区的结果。

首先,创建两个GraphFrame。由于在group列中有null,将它们替换为一个值unknown,代码如下:

// 理解GraphFrame中的分区
val v1 = g.vertices.select("id", "group").na.fill("unknown")
v1.show()

v1.groupBy("group").count().show

val g1 = GraphFrame(v1, g.edges)

接下来,在对原始GraphFrame进行重新分区之后创建第二个GraphFrame。在这里,使用组的数量作为初始分区数量,代码如下:

val v2 = g.vertices.select("id", "group").na.fill("unknown")
val g2t1  ......
          

......

抱歉,只有登录会员才可浏览!会员登录


《Spark原理深入与编程实战》