如何分析数据帧中的列(包含列表数据)


数据

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

col1
[elem1, elem2]
[elem3, elem4]

我想做这个:

col1
elem1
elem3

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

要将 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 -ing ArrayType 列通常不会生成此类异常。

相关内容

  • 没有找到相关文章

最新更新