我在数据框的特定列上调用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"))
但是这给出了错误。
答案 0 :(得分:3)
在创建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中硬编码格式时的难度
答案 1 :(得分:3)
您可以使用lit函数创建文字列并传递给udf。
def udfName = udf((name: String, value:String) => {
name + value
})
调用udf时使用lit()
函数:
dataframe.withColumn("colName", udfName($"firstName", lit("xyz")))
希望这有帮助!