gpt4 book ai didi

scala - Spark Dataframe - 获取所有对列表(Scala)

转载 作者:行者123 更新时间:2023-12-04 12:17:37 27 4
gpt4 key购买 nike

我有以下情况:
我有一个以“数组”作为架构的数据框。现在我想获取每个数组,所有对列表并将其再次保存在数据框中。例如:

这是原始数据框:

+---------------+
| candidateList|
+---------------+
| [1, 2]|
| [2, 3, 4]|
| [1, 3, 5]|
|[1, 2, 3, 4, 5]|
|[1, 2, 3, 4, 5]|
+---------------+

这就是计算后的样子:
+---------------+
| candidates |
+---------------+
| [1, 2]|
| [2, 3]|
| [2, 4]|
| [3, 4]|
| [1, 3]|
| [1, 5]|
| [3, 5]|
|and so on... |
+---------------+

我真的不知道这在 Spark 中怎么可能,也许有人给我一个提示。

亲切的问候

最佳答案

您需要创建一个 UDF(用户定义函数)并将其与 explode 一起使用。功能。由于 Scala 集合的 combinations,UDF 本身很简单。方法:

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]|
// +----------+

关于scala - Spark Dataframe - 获取所有对列表(Scala),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com