我正在计算图上某些节点的下游闭合。我的查询使用一些spark sql查询读取图形,然后将边连接成一个循环,直到无法连接为止。
val edges = ctx.sql("select * from edges")
var tree = null
for (i <- 1 to 10) {
if (tree == null) {
tree = edges.joinWith(edges, col("dst") == col("src"))
} else {
tree = tree.joinWith(edges, col("dst") == col("src"))
}
tree.show()
}
问题是每次循环迭代时都会扫描edge表。我尝试持久化所有数据集,但这无济于事。
有什么方法可以只读取一次表吗?