首页 > 解决方案 > 如何解析 DataFrame 中的列(带有列表数据)?

问题描述

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

col1
[elem1, elem2]
[elem3, elem4]

我想做这个:

col1
elem1
elem3

我试过dataFrameName.withColumn("col1", explode($"col1"))了,但它给了我一个 NoSuchElementException。这样做的正确方法是什么?

标签: scalaapache-sparkapache-spark-sql

解决方案


col1用它的第一个元素替换 ArrayType 列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-ing ArrayType 列通常不会产生这样的异常。


推荐阅读