我具有此功能:
def funcToUDF(fieldValues: Seq[Double]): Double =
fieldValues.reduce(aggFunc)
从中创建UDF:
def uDFToApply = udf(funcToUDF(_: Seq[Double]))
然后我想应用此udf向我的DataFrame添加新列:
val valueFieldsToCol = valueFields.map(col) //valueFields is a List[String] containing the fields to operate on
val isNotNull = valueFieldsToCol.map(_.isNotNull).reduce(_ || _)
val createArray = array(valueFieldsToCol : _*)
val dfWithOutput = df.withColumn(output, when(isNotNull,
uDFToApply(createArray)).otherwise(lit(None.orNull)))
我这里遇到的问题是,当我在when
方法中应用UDFToApply时,我正在传递可以具有空值的列。应用UDF时,我的aggFunc
可以是math.min
,并且在转换为Double
时将null字段转换为0.0。
尽管我可以为这个问题提供两种解决方案:
1-使udfs不要将null值强制转换为0.0,但不能使之起作用。
2-将null
列传递给UDF时将其过滤掉,我也做不到。尝试使用isNotNull
创建array
,但是UDF应该使用boolean
类型而不是Double
对此有何想法?