kin*_*ion 1 scala user-defined-functions apache-spark apache-spark-sql
我有一个 DataFrame 字段,它是Seq[Seq[String]]我构建的 UDF 以将所述列转换为 Seq[String] 列;基本上,一个flatten来自 Scala的函数的 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)))
}
Run Code Online (Sandbox Code Playgroud)
我的用例是字符串,但显然,这可能是通用的。您可以在 DataFrame 转换链中使用此函数,例如:
df.transform(combineSentences(inCol, outCol))
Run Code Online (Sandbox Code Playgroud)
是否有一个 Spark 内置函数可以做同样的事情?我一直没能找到一个。
有一个类似的函数(自 Spark 2.4 起),它被称为flatten:
import org.apache.spark.sql.functions.flatten
Run Code Online (Sandbox Code Playgroud)
从官方文档:
def flatten(e: Column): Column从数组数组创建单个数组。如果嵌套数组的结构深于两层,则仅删除一层嵌套。
自从
2.4.0
为了得到确切相当于你就必须coalesce更换NULL。
| 归档时间: |
|
| 查看次数: |
964 次 |
| 最近记录: |