图计算
计算图顶点的入度、出度示例:
g.inDegrees.printSchema() // root // |-- id: string (nullable = true) // |-- inDegree: integer (nullable = false) g.inDegrees.show() // +---+--------+ // | id|inDegree| // +---+--------+ // | f| 1| // | e| 1| // | d| 1| // | c| 2| // | b| 2| // | a| 1| // +---+--------+ g.outDegrees.printSchema() // root // |-- id: string (nullable = true) // |-- outDegree: integer (nullable = false) g.outDegrees.show() // +---+---------+ // | id|outDegree| // +---+---------+ // | f| 1| // | e| 2| // | d| 1| // | c| 1| // | b| 1| // | a| 2| // +---+---------+
入度:是通过对边的dataframe操作实现的,按"dst"列分组统计数量,源码如下:
@transient lazy val inDegrees: DataFrame = { edges.groupBy(edges(DST).as(ID)).agg(count("*").cast("int").as("inDegree")) }出度:是通过对边的dataframe操作实现的,按"src"列分组统计数量,源码如下:
@transient lazy val outDegrees: DataFrame = { edges.groupBy(edges(SRC).as(ID)).agg(count("*").cast("int").as("outDegree")) }