Déposez plusieurs colonnes de Spark dataframe en parcourant les colonnes à partir d'un Scala Liste de noms de Colonnes

J'ai un dataframe qui a des colonnes autour de 400, je veux déposer 100 colonnes que par mon exigence.
J'ai donc créé un Scala Liste de 100 noms de colonne.
Et puis je veux parcourir une boucle for pour réellement supprimer la colonne pour chaque itération de boucle.

Ci-dessous est le code.

final val dropList: List[String] = List("Col1","Col2",...."Col100”)

def drpColsfunc(inputDF: DataFrame): DataFrame = { 
    for (i <- 0 to dropList.length - 1) {
        val returnDF = inputDF.drop(dropList(i))
    }
    return returnDF
}

val test_df = drpColsfunc(input_dataframe) 

test_df.show(5)
  • J'obtiens une erreur de compilation qui n'a pas pu résoudre "returnDF". Quelqu'un peut s'il vous plaît aider à résoudre ce problème.
  • Merci de faire de la question de l'auto-contenue. Pourquoi mettez-vous une partie de votre question dans les commentaires? Comment puis-je poser une bonne question?
  • Veuillez modifier votre question avec les informations supplémentaires que vous avez ajoutés dans les commentaires !
  • Martin et Eliasah-en Fait, les changements dans la question. Merci
  • Le problème que j'ai été confronté avec le code ci-dessus est, j'obtiens une erreur de compilation qui "n'a pas pu résoudre 'returnDF'". Quelqu'un peut s'il vous plaît aider à résoudre ce problème.
  • En fait, je pense que nous ne pouvons pas le faire de cette façon. La raison est, dataframe lui-même ne peut pas être répétées depuis son immuable, il ne peut pas être modifié. Je veux dire quand une colonne est supprimée de la nouvelle dataframe est créé dans la première itération et quand dans la prochaine itération de la dataframe est toujours l'ancien.
  • Dans la nouvelle Spark Version 2.0, je pense que nous avons API disponibles à la chute de plusieurs colonnes de la liste à l'aide d'une instruction drop.
  • J'ai résolu ce problème en utilisant le code à partir de la source apache-spark-user-list.1001560.n3.nabble.com/...
  • val colsToRemove = Seq("colA", "colb ne", "colC", etc) val filteredDF = df.sélectionnez(df.les colonnes .filtre(colName => !colsToRemove.contient(colName)) .carte(colName => nouvelle Colonne(colName)): _*)

InformationsquelleAutor Ramesh | 2016-09-30