如何解析DataFrame中的列(带有列表数据)?

时间:2019-01-26 00:24:51

标签: scala apache-spark apache-spark-sql

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

col1
[elem1, elem2]
[elem3, elem4]

我要这样做:

col1
elem1
elem3

我已经尝试过dataFrameName.withColumn("col1", explode($"col1")),但是它给了我NoSuchElementException。什么是正确的方法?

1 个答案:

答案 0 :(得分:1)

要将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可能会有一个单独的问题,因为explode-进入ArrayType列通常不会生成此类异常。