Scala 如何在数据帧内解析列(使用列表数据)?

Scala 如何在数据帧内解析列(使用列表数据)?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,DataFrame中有一列包含一个列表,我想为第一个元素解析该列表,并用它替换该列。例如: col1 [elem1, elem2] [elem3, elem4] 我想说: col1 elem1 elem3 我尝试了dataFrameName.withColumn(“col1”,explode($“col1”))但它给了我一个NoTouchElementException。正确的方法是什么?要用第一个元素替换ArrayType列col1,explode将不会有用。您只需将其替换为$“col1”

DataFrame中有一列包含一个列表,我想为第一个元素解析该列表,并用它替换该列。例如:

col1
[elem1, elem2]
[elem3, elem4]
我想说:

col1
elem1
elem3

我尝试了
dataFrameName.withColumn(“col1”,explode($“col1”))
但它给了我一个NoTouchElementException。正确的方法是什么?

要用第一个元素替换ArrayType列
col1
explode
将不会有用。您只需将其替换为
$“col1”(0)
(或
$“col1”.getItem(0)
),如下所示:

import spark.implicits._
import org.apache.spark.sql.functions._

val df = Seq(
  Seq("elem1", "elem2"),
  Seq("elem3", "elem4")
).toDF("col1")

df.withColumn("col1", $"col1"(0)).show
// +-----+
// | col1|
// +-----+
// |elem1|
// |elem3|
// +-----+
请注意,遇到的
NoSuchElementException
,您可能会遇到一个单独的问题,因为
分解
-通常使用ArrayType列不会生成这样的异常