2016-10-07 7 views
2

List [Column]を使用してスパークセレクトを実行する良い方法を見つけようとしていますが、私は自分の展開した列に興味があるすべての列を戻すよりも列を爆発させています。私が知っているこれを行うための良い方法を見つけようとしてSpark列のリストで選択するScala

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

それは私が火花2.0について

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

どのバージョンのSparkをお使いですか? 1.6.0は 'def select(cols:Column *):DataFrame'を提供しています。 – LiMuBei

+0

私は2.0.0を使用しています。リストを選択しようとしたので[Column]、Seq [Column]を使ってどうしたらいいのでしょうか?どちらもうまくいきませんでしたが、その方法も見ましたが、私はそれを使用できませんでした。どのように私はそれを使用するためにその呼び出しでリストに分割するだろうか? – neuroh

+0

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

答えて

5

ような何かを行うことができ、文字列だった場合、次の2つのオプションを持っているようです。両方とも列(StringsまたはColumns)をどのように管理するかによって異なります。

スパークコード(火花sql_2.11/ORG/apacheの/火花/ 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(_)) : _*) 

あなたはどのように内部で火花がリストにあなたのhead & tailに変換され見ることができます再度呼び出す列のSelect

場合は、列:リスト[文字列]

だから、その場合には、あなたは、私がお勧めしますクリアコードをしたい場合は

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

そうでない場合、列:リスト[コラム]

df.select(columns: _*) 
関連する問題