2016-05-19 67 views
-1

使用UDF意味着每个因子c1,c2,c3必须独立传递参数。有没有灵活的解决方案,例如如何将这些因子的序列传递给UDF如何将二维数组传递给用户定义的函数?

val myFunction = udf { 
     (userBias: Float, productBias: Float, productBiases: Map[Long, Float], 
     userFactors: Seq[Float], productFactors: Seq[Float], c1: String, c2: String, c3: String) => 

     var result = Float.NaN 

     // result calculation 

     result 
    } 

然后我把这个功能通过以下方式(datasetDataFrame):

myFunction(userBias("bias"), 
      productBias("bias"), 
      productBias("biases"), 
      userFactors("features"), 
      productFactors("features"), 
      dataset(factors(0)), dataset(factors(1)), dataset(factors(2)) 

如果我做这样的事情,那么编译器说 “不适用”:

val myFactors = dataset.select(factors.head, factors.tail: _*) 

myFunction(userBias("bias"), 
      productBias("bias"), 
      productBias("biases"), 
      userFactors("features"), 
      productFactors("features"), 
      myFactors) 
+0

为什么这个问题是downvoted? – Klue

回答

0

如果你有这样的二维数组:

val xy = Array.ofDim[Int](numrows, numcolumns); 
isFunction(xy); 

为isFunction你的函数定义是这样的:

def isFunction(arg: Array[Array[Int]]){ 
    println(arg(i)(0)); // how to access array element