Scala 如何编写代码来创建一个数据集,其中的列将数组列中的元素作为值,其名称作为位置?

Scala 如何编写代码来创建一个数据集,其中的列将数组列中的元素作为值,其名称作为位置?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,输入数据: val inputDf = Seq(Seq("a", "b", "c"), Seq("X", "Y", "Z")).toDF println("Input:") inputDf.show(false) 下面是如何查看输入: +---------+ |value | +---------+ |[a, b, c]| |[X, Y, Z]| +---------+ 以下是您的期望: +---+---+

输入数据:

    val inputDf = Seq(Seq("a", "b", "c"), Seq("X", "Y", "Z")).toDF
    println("Input:")
    inputDf.show(false)
下面是如何查看输入:

    +---------+
    |value    |
    +---------+
    |[a, b, c]|
    |[X, Y, Z]|
    +---------+
以下是您的期望:

    +---+---+---+
    |0  |1  |2  |
    +---+---+---+
    |a  |b  |c  |
    |X  |Y  |Z  |
    +---+---+---+
我尝试使用如下代码:

    val ncols = 3

    val selectCols = (0 until  ncols).map(i => $"arr"(i).as(s"col_$i"))

    inputDf
      .select(selectCols:_*)
      .show()

但我有一些错误,因为我需要一些:Unit

另一种创建数据帧的方法---

package spark

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.col

object ArrayToCol extends App {
  val spark = SparkSession.builder()
    .master("local")
    .appName("DataFrame-example")
    .getOrCreate()

  import spark.implicits._
  val inptDf = Seq(Seq("a", "b", "c"), Seq("X", "Y", "Z")).toDF("value")
  val d = inptDf
    .withColumn("0", col("value").getItem(0))
    .withColumn("1", col("value").getItem(1))
    .withColumn("2", col("value").getItem(2))
    .drop("value")

  d.show(false)

}
// Variant 2
val res = inptDf.select(
    $"value".getItem(0).as("col0"),
    $"value".getItem(1).as("col1"),
    $"value".getItem(2).as("col2")
  )
// Variant 3
val res1 = inptDf.select(
    col("*") +: (0 until 3).map(i => col("value").getItem(i).as(s"$i")): _*
  )
    .drop("value")
输出-----------

+----+---------+
|col2|     col4|
+----+---------+
|   1|[4, 2, 1]|
|   4|   [3, 2]|
+----+---------+

创建数据帧的另一种方法---

输出-----------

+----+---------+
|col2|     col4|
+----+---------+
|   1|[4, 2, 1]|
|   4|   [3, 2]|
+----+---------+

我尝试过,但仍然有错误:类型不匹配,需要:Unitplease,最后一个版本我的答案-@rabbitI尝试过,但仍然有错误:类型不匹配,需要:Unitplease,最后一个版本我的答案-@rabbitI如果你接受解算器的答案会更好。如果你接受解算者的答案会更好。