我有一個DataFrame與許多列。 我也有一個功能Scala:variadic UDF
def getFeatureVector(features:Array[String]) : Vector
是相當複雜的,但需要一些字符串並返回火花MLlib載體。
現在,我想看看DF中的一些列(我不知道哪個列),將它們傳遞給getFeatureVector,並添加一個包含結果向量的新列。
我有機會獲得我想要使用的列的數組,我寫了它轉換爲字符串的函數,使一個陣列列:
val colNamesToEncode = Array("col1", "col2", "col3", "col4")
def getColsToEncode:Column = {
val cols = colNamesToEncode.map(x => col(x).cast("string"))
array(cols:_*)
}
最後,我儘量讓UDF並把它應用到DF:
val encoderUDF = udf(getFeatureVector _)
val cols = getColsToEncode()
data.withColumn(featuresColName,encoderUDF(cols))
但是當我運行的是,我得到了java.lang.RuntimeException:不支持的文本類型類scala.runtime.BoxedUnit()
如何申請工作以該DF?我寫這段代碼的時候用了這個答案(Spark UDF with varargs)作爲指導。