2016-10-07 2 views
2

Ich versuche, einen guten Weg zu finden, einen Funke auszuwählen mit einer Liste [Spalte, ich bin eine Spalte explodieren, als alle Spalten, die mich interessieren, mit meiner explodierten Spalte zurück.Spark Select mit einer Liste von Spalten Scala

var columns = getColumns(x) // Returns a List[Column] 
tempDf.select(columns) //trying to get 

Der Versuch, ein guter Weg, dies zu tun, ich weiß, zu finden, wenn es sich um eine Zeichenfolge waren ich so etwas wie

val result = dataframe.select(columnNames.head, columnNames.tail: _*) 
+3

Welche Spark-Version verwenden Sie? 1.6.0 bietet 'def select (Spalten: Spalte *): DataFrame' was sollte tun, was Sie wollen? – LiMuBei

+0

Ich benutze 2.0.0. Wie würde ich davon Gebrauch machen, weil ich versucht habe, eine Liste [Spalte] und Seq [Spalte] auszuwählen. Keiner von denen funktionierte, ich sah diese Methode auch, aber ich war nicht in der Lage, es zu benutzen. Wie würde ich die Liste in dieser Invokation auflösen, um sie zu nutzen? – neuroh

+0

'val result = dataframe.select (Spalten: _ *)' –

Antwort

5

Für Funken 2.0 scheint, dass Sie haben zwei Möglichkeiten tun konnte. Beides hängt davon ab, wie Sie Ihre Spalten verwalten (Strings oder Columns).

Spark-Code (Funken sql_2.11/org/apache/Funken/SQL/Dataset.scala):

def select(cols: Column*): DataFrame = withPlan { 
    Project(cols.map(_.named), logicalPlan) 
} 

def select(col: String, cols: String*): DataFrame = select((col +: cols).map(Column(_)) : _*) 

können Sie sehen, wie intern Funke Ihre head & tail in eine Liste konvertieren der wieder anzurufenden Spalten Select.

Also, in diesem Fall, wenn Sie einen freien Code möchte ich empfehlen wird:

Wenn Spalten: Liste [Zeichenfolge]:

import org.apache.spark.sql.functions.col 
df.select(columns.map(col): _*) 

Andernfalls, wenn Spalten: Liste [Spalten]:

df.select(columns: _*) 
Verwandte Themen