将参数传递给 Scala udf [重复]

Posted

技术标签:

【中文标题】将参数传递给 Scala udf [重复]【英文标题】:Passing arguments to a Scala udf [duplicate] 【发布时间】:2017-06-05 13:48:43 【问题描述】:

我在我的数据框的特定列上调用 udf,我在其中检查所有值是否按照指定的日期格式有效。

sourcefile = sourcefile.withColumn(column, DateConversion(col(column)))

这里 DateConversion 是我的 udf。我的问题是,有没有一种方法可以将有效的日期格式“yyyy/MM/dd”作为字符串传递给这个 udf,它可以在 udf 内部用于验证目的。

我在尝试

sourcefile = sourcefile.withColumn(column, DateConversion(col(column),"yyyy/MM/dd"))

但这会产生错误。

【问题讨论】:

this 会给你一个好的开始。 【参考方案1】:

您可以使用 lit 函数创建一个文字列并传递给 udf。

def udfName = udf((name: String, value:String) => 
      name + value
    )

调用udf时使用lit()函数:

dataframe.withColumn("colName", udfName($"firstName", lit("xyz")))

【讨论】:

【参考方案2】:

当创建 udf 时,您可以只对 udf 进行 curry,传入日期格式 - 或者实际上是您想要的任何其他参数。

def getUdf(format: String) = udfdate: String =>
  /*some logic that uses format*/

然后像这样调用那个方法

val dateConversion = getUdf("yyyy/MM/dd")
sourcefile = sourcefile.withColumn(column, dateConversion(col(column)))

这也将允许您通过更改传递给 getUdf 的参数轻松换出日期转换格式,而不是在 udf 中硬编码格式时遇到的困难

【讨论】:

以上是关于将参数传递给 Scala udf [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在scala中我可以将重复的参数传递给其他方法吗?

将 UDF 方法作为参数传递给 KSQL 中的其他 UDF

如何使用 withColumn 将额外的参数传递给 UDF

Pig 将关系作为参数传递给 UDF

Pyspark 将函数作为参数传递给 UDF

将列表作为参数传递给 udf 方法