是否有内置的 Spark 可以展平嵌套数组



我有一个数据帧字段,这是一个Seq[Seq[String]] 我构建了一个UDF来将所述列转换为Seq[String]列;基本上,来自Scala的flatten函数的UDF。

def combineSentences(inCol: String, outCol: String): DataFrame => DataFrame = {
    def flatfunc(seqOfSeq: Seq[Seq[String]]): Seq[String] = seqOfSeq match {
        case null => Seq.empty[String]
        case _ => seqOfSeq.flatten
    }
    df: DataFrame => df.withColumn(outCol, udf(flatfunc _).apply(col(inCol)))
}

我的用例是字符串,但显然,这可能是通用的。可以在数据帧转换链中使用此函数,如下所示:

df.transform(combineSentences(inCol, outCol))

是否有 Spark 内置函数可以做同样的事情?我一直找不到。

有一个类似的函数(从 Spark 2.4 开始),它被称为 flatten

import org.apache.spark.sql.functions.flatten

来自官方文档:

def flatten(e: Column): Column

从数组数组创建单个数组。如果嵌套数组的结构深度超过两个级别,则只删除一个嵌套级别。

因为

2.4.0

要获得完全相同的等效项,您必须coalesce替换NULL

相关内容

  • 没有找到相关文章

最新更新