我有以下情况: 我有一个带有“数组”作为架构的数据框。现在,我想获取每个数组的所有对列表,并将其再次保存在数据框中。例如:
这是原始数据框:
_CorExeMain
这就是计算后的样子:
+---------------+
| candidateList|
+---------------+
| [1, 2]|
| [2, 3, 4]|
| [1, 3, 5]|
|[1, 2, 3, 4, 5]|
|[1, 2, 3, 4, 5]|
+---------------+
我真的不知道这怎么可能,也许有人给我一个提示。
亲切的问候
Sedir Mohammed
答案 0 :(得分:3)
您需要创建UDF(用户定义函数)并将其与explode
函数一起使用。 UDF本身很简单,这要归功于Scala集合的combinations
方法:
import scala.collection.mutable
import org.apache.spark.sql.functions._
import spark.implicits._
val pairsUdf = udf((arr: mutable.Seq[Int]) => arr.combinations(2).toArray)
val result = df.select(explode(pairsUdf($"candidateList")) as "candidates")
result.show(numRows = 8)
// +----------+
// |candidates|
// +----------+
// | [1, 2]|
// | [2, 3]|
// | [2, 4]|
// | [3, 4]|
// | [1, 3]|
// | [1, 5]|
// | [3, 5]|
// | [1, 2]|
// +----------+