2017-09-23 36 views
0

的選擇EXPR我是很新的Scala編程,所以這可能是一個基本的問題使用生成的字符串在數據幀

我計劃動態創建一個數據幀。

這是我的最終目標:

val df2 = df1.select("col1","col2","col3") 

我產生這些列名如下,並保存到這樣一個變量的函數:

scala> val colVar = generateColSelectionString(4) 
colVar: String = col1,col2,col3 

現在,

如何我是否這樣做:

val df2 = df1.select(colVar) 

回答

3

您可以分割字符串,並使用selectExpr

val df = Seq((1,2,3)).toDF("col1","col2","col3") 

val colVar = "col1,col2,col3" 

df.selectExpr(colVar.split(","):_*).show 
+----+----+----+ 
|col1|col2|col3| 
+----+----+----+ 
| 1| 2| 3| 
+----+----+----+ 
+1

這很快!謝謝:) –

+0

如何在groupBy()中做同樣的事情 –

+1

對於'groupBy',你可以做類似'val cols = colVar.split(「,」); df.groupBy(cols.head,cols.tail:_ *)。agg(...)' – Psidom

2

拆分 「colVar」 變量,並使用 「選擇」 有兩個參數:

val data = List(("v1", "v2", "v3")) 
val df = sparkContext.parallelize(data).toDF("col1", "col2", "col3") 

val colVar = "col1,col2,col3" 
val columnList = colVar.split(",") 
val result = df.select(columnList.head, columnList.tail: _*) 
result.show(false) 

輸出:

+----+----+----+ 
|col1|col2|col3| 
+----+----+----+ 
|v1 |v2 |v3 | 
+----+----+----+ 
+0

謝謝很多,因爲我在同一時間得到了兩個答案,我接受了名單中的第一個 –