2017-07-27 139 views
0

我有一個具有不同類型列的DataFrame。在那些列中,我需要從該DataFrame中檢索特定的列。 硬編碼的數據幀的select語句將是這樣的:Spark Scala DataFrame中的動態列選擇

val logRegrDF = myDF.select(myDF("LEBEL_COLUMN").as("label"), 
col("FEATURE_COL1"), col("FEATURE_COL2"), col("FEATURE_COL3"), col("FEATURE_COL4")) 

凡LEBEL_COLUMN和FEATURE_COLs將是動態的。 我有數組或序列爲那些特色欄目是這樣的:

val FEATURE_COL_ARR = Array("FEATURE_COL1","FEATURE_COL2","FEATURE_COL3","FEATURE_COL4") 

我需要在第二部分使用列集合的這陣與SELECT語句。 在select中,第一列將是一個(LABEL_COLUMN),其餘的將是動態列表。

你能幫我做一下SCALA中的select語句嗎?

注: 樣品給波紋管的工作,但我需要添加列陣列中的SELECT

val colNames = FEATURE_COL_ARR.map(name => col(name)) 
val logRegrDF = myDF.select(colNames:_*) // it is not the requirement 

我想到的第二部分代碼的第二部分的代碼會是這樣,但它不工作:

val logRegrDF = myDF.select(myDF("LEBEL_COLUMN").as("label"), colNames:_*) 

回答

1

如果我明白你的問題,我希望這是你在找什麼

val allColumnsArr = "LEBEL_COLUMN" +: FEATURE_COL_ARR 
result.select("LEBEL_COLUMN", allColumnsArr: _*) 
    .withColumnRenamed("LEBEL_COLUMN", "label") 

希望這會有所幫助!

+0

喜@尚卡爾,非常感謝。 雖然你給出的建議是行不通的,但我從你的建議得到了想法,並通過這種方式 VAL allColumnsArr =「LEBEL_COLUMN」 +解決問題:FEATURE_COLUMNS VAL colNames = allColumnsArr.map(名稱=>山口(名稱)) myDF.select(colNames:_ *)。withColumnRenamed(「LEBEL_COLUMN」,「label」) –

+1

更新了答案,請檢查。你不需要列,字符串也被接受爲參數。 –

+0

是的這有效。 \t result.select(「LEBEL_COLUMN」,FEATURE_COL_ARR:_ *).withColumnRenamed(「LEBEL_COLUMN」,「label」) –

0

非常感謝@Shankar。

雖然你給出的建議是行不通的,但我得到了你的建議,想法,並通過這種方式

val allColumnsArr = "LEBEL_COLUMN" +: FEATURE_COL_ARR 
val colNames = allColumnsArr.map(name => col(name)) 
myDF.select(colNames:_*).withColumnRenamed("LEBEL_COLUMN", "label") 

而且這種方式解決了這個問題,而無需創建數據框柱:

result.select(LEBEL_COLUMN, FEATURE_COL_ARR: _*) .withColumnRenamed(LEBEL_COLUMN, "label") 
+0

result.select(「LEBEL_COLUMN」,FEATURE_COL_ARR:_ *) .withColumnRenamed(「LEBEL_COLUMN」,「label」) 它也用這種方式。 –

相關問題