我有一个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内置功能是否具有相同功能?我一直找不到。
答案 0 :(得分:4)
有一个类似的功能(自Spark 2.4起),它被称为flatten
:
import org.apache.spark.sql.functions.flatten
def flatten(e: Column): Column
从数组数组创建单个数组。如果嵌套数组的结构深于两层,则仅除去一层嵌套。
因为
2.4.0
要获得确切的等效值,您必须coalesce
来替换NULL
。