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如果你接受解算器的答案会更好。如果你接受解算者的答案会更好。