【问题标题】:Is there a Spark built-in that flattens nested arrays?是否有内置 Spark 可以扁平化嵌套数组?
【发布时间】:2019-01-19 20:51:04
【问题描述】:

我有一个 Seq[Seq[String]] 的 DataFrame 字段,我构建了一个 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)))
}

我的用例是字符串,但显然,这可能是通用的。您可以在一系列 DataFrame 转换中使用此函数,例如:

df.transform(combineSentences(inCol, outCol))

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

【问题讨论】:

    标签: scala apache-spark apache-spark-sql user-defined-functions


    【解决方案1】:

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

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

    来自the official documentation

    def flatten(e: Column): Column

    从数组数组创建单个数组。如果嵌套数组的结构深于两层,则只删除一层嵌套。

    自从

    2.4.0

    要获得确切的等价物,您必须使用 coalesce 替换 NULL

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多