簡體   English   中英

從DataFrame選擇Spark Scala動態列

[英]Spark Scala Dynamic column selection from DataFrame

我有一個具有不同類型的列的DataFrame。 在那些列中,我需要從該DataFrame中檢索特定的列。 硬編碼的DataFrame select語句將如下所示:

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

LEBEL_COLUMN和FEATURE_COL將是動態的。 我對這些FEATURE列使用Array或Seq:

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

我需要將此列集合的數組與第二部分的SELECT語句一起使用。 在選擇中,第一列將是一列(LABEL_COLUMN),其余列將是動態列表。

您能幫我使select語句在SCALA中工作嗎?

注意:下面給出的示例代碼正在工作,但是我需要在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:_*)

如果我理解您的問題,希望這就是您要尋找的

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

希望這可以幫助!

非常感謝@Shankar。

盡管您的建議沒有用,但是我從您的建議中得到了一個主意,並以此方式解決了問題

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

同樣,這種方式無需創建DataFrame列:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM