gpt4 book ai didi

scala - Spark - 将整行传递给 udf,然后在 udf 中获取列名

转载 作者:行者123 更新时间:2023-12-04 15:54:14 30 4
gpt4 key购买 nike

我正在将 Spark 与 Scala 一起使用,并希望将整行传递给 udf 并选择 udf 中的每个列名和列值。我怎样才能做到这一点?

我正在尝试以下 -

inputDataDF.withColumn("errorField", mapCategory(ruleForNullValidation) (col(_*)))

def mapCategory(categories: Map[String, Boolean]) = {
udf((input:Row) => //write a recursive function to check if each row is in categories if yes check for null if null then false, repeat this for all columns and then combine results)
})

最佳答案

在 Spark 1.6 中你可以使用 Row作为外部类型和 struct作为表达。作为表达。列名可以从架构中获取。例如:

import org.apache.spark.sql.Row
import org.apache.spark.sql.functions.{col, struct}

val df = Seq((1, 2, 3)).toDF("a", "b", "c")
val f = udf((row: Row) => row.schema.fieldNames)
df.select(f(struct(df.columns map col: _*))).show

// +-----------------------------------------------------------------------------+
// |UDF(named_struct(NamePlaceholder, a, NamePlaceholder, b, NamePlaceholder, c))|
// +-----------------------------------------------------------------------------+
// | [a, b, c]|
// +-----------------------------------------------------------------------------+

可以使用 Row.getAs 按名称访问值方法。

关于scala - Spark - 将整行传递给 udf,然后在 udf 中获取列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50474698/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com