相关疑难解决方法(0)

Spark中如何获取数组列的所有组合?

假设我有一个数组列group_ids

+-------+----------+
|user_id|group_ids |
+-------+----------+
|1      |[5, 8]    |
|3      |[1, 2, 3] |
|2      |[1, 4]    |
+-------+----------+
Run Code Online (Sandbox Code Playgroud)

架构:

root
 |-- user_id: integer (nullable = false)
 |-- group_ids: array (nullable = false)
 |    |-- element: integer (containsNull = false)
Run Code Online (Sandbox Code Playgroud)

我想获得所有对的组合:

+-------+------------------------+
|user_id|group_ids               |
+-------+------------------------+
|1      |[[5, 8]]                |
|3      |[[1, 2], [1, 3], [2, 3]]|
|2      |[[1, 4]]                |
+-------+------------------------+
Run Code Online (Sandbox Code Playgroud)

到目前为止,我使用 UDF 创建了最简单的解决方案:

spark.udf.register("permutate", udf((xs: Seq[Int]) => xs.combinations(2).toSeq))

dataset.withColumn("group_ids", expr("permutate(group_ids)"))
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是通过 Spark 内置函数实现的东西。有没有办法在没有 UDF 的情况下实现相同的代码?

scala user-defined-functions apache-spark apache-spark-sql

5
推荐指数
1
解决办法
2020
查看次数