你可以表演
fullouter
加入分组结果
src
和
tgt
df.groupBy("src").count().as("srcs")
.join(df.groupBy("tgt").count().as("tgts"), $"src" === $"tgt", "fullouter")
.select(
coalesce($"src", $"tgt") as "node",
coalesce($"srcs.count", lit(0)) as "out_deg",
coalesce($"tgts.count", lit(0)) as "in_deg"
).withColumn("total_deg", $"in_deg" + $"out_deg")
.orderBy($"node")
.show()
// +----+-------+------+---------+
// |node|out_deg|in_deg|total_deg|
// +----+-------+------+---------+
// | 1| 3| 1| 4|
// | 2| 3| 3| 6|
// | 3| 1| 2| 3|
// | 4| 3| 2| 5|
// | 5| 1| 2| 3|
// | 6| 0| 1| 1|
// +----+-------+------+---------+
但是:可能会有更有效的解决方案,我也建议您
Spark GraphX