2016-07-12 6 views
2

Ich muss eine Sequenz von Spalten angeben. Wenn ich zwei Strings übergeben, es funktioniert gutudf spark Spaltennamen

val cols = array("predicted1", "predicted2") 

aber wenn ich eine Sequenz oder ein Array übergeben, bekomme ich einen Fehler:

val cols = array(Seq("predicted1", "predicted2")) 

Könnten Sie mir bitte helfen? Danke vielmals!

Antwort

1

Funktionssignatur ist def array(colName: String, colNames: String*): Column, was bedeutet, dass es eine Zeichenfolge und dann eine oder mehrere Zeichenfolgen dauert. Wenn Sie eine Sequenz verwenden möchten, tun Sie es wie folgt aus:

array("predicted1", Seq("predicted2"):_*) 

Von dem, was ich in the code sehen können, gibt es ein paar überladenen Versionen dieser Funktion sind, aber keiner nimmt eine Seq direkt. Es sollte also der Weg sein, wie beschrieben in varargs zu konvertieren.

1

Sie haben mindestens zwei Möglichkeiten:

  1. Mit einem Seq[String]:

    val columns: Seq[String] = Seq("predicted1", "predicted2") 
    
    array(columns.head, columns.tail: _*) 
    
  2. Mit einem Seq[ColumnName]:

    val columns: Seq[ColumnName] = Seq($"predicted1", $"predicted2") 
    
    array(columns: _*) 
    
0

Sie können diepassierenin der array Funktion durch Umwandlung in eine Array wie unten.

import org.apache.spark.sql.functions._ 
val cols = array(Seq("predicted1", "predicted2").map(col): _*)