可以向该数据框操作添加udf包装器

时间:2018-11-05 16:55:48

标签: scala apache-spark

var result_df1 = result_df.select(result_df.columns.map(c => col(c).cast(StringType)): _ * )

这是我正在执行的数据框操作。我有一个名为EmptyToNull的udf,它接受一个参数(一个值),检查它是否为空,如果是,则将其更改为null。是否可以在我已经执行的此数据帧操作中调用此UDF?

1 个答案:

答案 0 :(得分:0)

函数“ col”可以由UDF包装:

// functions
val emptyToNull : (String) => String = (value: String) => if(StringUtils.isBlank(value)) null else value
val emptyToNullUDF = udf(emptyToNull)

// usage
val result_df= List(("NonEmpty"," ") ).toDF("nonempty","empty")
    val result_df1 = result_df.select(result_df.columns.map(c => emptyToNullUDF(col(c)).alias(c).cast(StringType)): _ * )
result_df1.show(false)

输出:

+--------+-----+
|nonempty|empty|
+--------+-----+
|NonEmpty|null |
+--------+-----+

注意:“别名”用于保留列名。另外,如果原始列具有StringType,则不需要子句“ .cast(StringType)”。