Roh*_*wal 1 scala user-defined-functions apache-spark apache-spark-sql
我在数据框的特定列上调用udf,在其中检查所有值是否均按照指定的日期格式有效。
sourcefile = sourcefile.withColumn(column, DateConversion(col(column)))
Run Code Online (Sandbox Code Playgroud)
这里DateConversion是我的udf。我在这里的问题是,有没有一种方法可以将有效的日期格式“ yyyy / MM / dd”作为字符串传递给此udf,可以在udf中内部使用以进行验证。
我在尝试
sourcefile = sourcefile.withColumn(column, DateConversion(col(column),"yyyy/MM/dd"))
Run Code Online (Sandbox Code Playgroud)
但这给与错误。
您可以使用lit函数创建文字列并将其传递给udf。
def udfName = udf((name: String, value:String) => {
name + value
})
Run Code Online (Sandbox Code Playgroud)
lit()在调用udf时使用函数:
dataframe.withColumn("colName", udfName($"firstName", lit("xyz")))
Run Code Online (Sandbox Code Playgroud)
您可以在创建 udf 时对 udf 进行柯里化,传入日期格式(或者您想要的任何其他参数)。
def getUdf(format: String) = udf{date: String =>
/*some logic that uses format*/}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用该方法
val dateConversion = getUdf("yyyy/MM/dd")
sourcefile = sourcefile.withColumn(column, dateConversion(col(column)))
Run Code Online (Sandbox Code Playgroud)
这还允许您通过更改传递给 getUdf 的参数来轻松交换日期转换格式,而不是在 udf 内硬编码格式时遇到困难
| 归档时间: |
|
| 查看次数: |
4146 次 |
| 最近记录: |