2016-05-19 13 views
-1

Die Verwendung von UDF bedeutet, dass jeder Faktor c1, c2, c3 unabhängig vom Parameter übergeben werden muss. Gibt es eine flexible Lösung, z.B. Wie übergibt man eine Folge dieser Faktoren an UDF?Wie übergebe ich ein zweidimensionales Array zu benutzerdefinierten Funktionen?

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 
    } 

und dann diese Funktion nenne ich die folgende Art und Weise (dataset ist ein DataFrame):

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

Wenn ich so etwas tun, dann wird der Compiler sagt: "Nicht zutreffend":

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

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

Warum wurde die Frage downvoted? – Klue

Antwort

0

Wenn Sie ein 2D-Array wie folgt haben:

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

Ihre Funktionsdefinition für isFunction würde wie folgt aussehen:

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