如何使用Spark中ArrayType的节点路径列创建边列表?

How to create an edge list using a column of node path of ArrayType in Spark?

我有一个包含单列 ArrayType 的 Spark 数据集,它表示从一个用户通过他们共同的朋友到另一个用户的路径

path
["Amy","John","Wally"]
["Beth","Sally","Tim","Jacob"]

我最终想要实现的是 table 明确列出路径中的边。 (即边缘列表)

src dest
"Amy" "John"
"John" "Amy"
"John" "Wally"
"Beth" "Sally"
"Sally" "Tim"
"Tim" "Sally"
"Tim" "Jacob"
"Jacob" "Tim"

我应该如何尝试将前者 table 转换为后者?

您可以通过在两个 slice 上使用 arrays_zip 将每个列表转换为边(对)列表 - 一个 w/o 最后一个元素和一个 w/o第一个元素。它将创建结构数组,然后 explode 结果数组将每个结构放在单独的行中,然后将结构列转换为两个单独的列 (withColumn)。 然后你应该添加反向节点并使用 distinct.

删除重复项

我假设您使用 DataFrame 并使用 spark sql 函数。