将参数传递给 Scala udf
Passing arguments to a Scala udf
我在我的数据框的特定列上调用一个 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"))
但这给出了错误。
您可以只柯里化 udf,在创建 udf 时传入日期格式 - 或者实际上任何其他您想要的参数。
def getUdf(format: String) = udf{date: String =>
/*some logic that uses format*/}
然后像这样调用那个方法
val dateConversion = getUdf("yyyy/MM/dd")
sourcefile = sourcefile.withColumn(column, dateConversion(col(column)))
这还允许您通过更改传递给 getUdf 的参数轻松换出日期转换格式,而不是在 udf 中硬编码格式时遇到的困难
您可以使用 lit 函数创建文字列并传递给 udf。
def udfName = udf((name: String, value:String) => {
name + value
})
调用 udf 时使用 lit()
函数:
dataframe.withColumn("colName", udfName($"firstName", lit("xyz")))
我在我的数据框的特定列上调用一个 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"))
但这给出了错误。
您可以只柯里化 udf,在创建 udf 时传入日期格式 - 或者实际上任何其他您想要的参数。
def getUdf(format: String) = udf{date: String =>
/*some logic that uses format*/}
然后像这样调用那个方法
val dateConversion = getUdf("yyyy/MM/dd")
sourcefile = sourcefile.withColumn(column, dateConversion(col(column)))
这还允许您通过更改传递给 getUdf 的参数轻松换出日期转换格式,而不是在 udf 中硬编码格式时遇到的困难
您可以使用 lit 函数创建文字列并传递给 udf。
def udfName = udf((name: String, value:String) => {
name + value
})
调用 udf 时使用 lit()
函数:
dataframe.withColumn("colName", udfName($"firstName", lit("xyz")))