Scala: Comment puis-je remplacer la valeur dans Dataframes utilisation de scala
Par exemple je veux remplacer tous les nombres égaux à 0,2 dans une colonne à 0. Comment puis-je le faire en Scala? Grâce
Modifier:
|year| make|model| comment |blank|
|2012|Tesla| S | No comment | |
|1997| Ford| E350|Go get one now th...| |
|2015|Chevy| Volt| null | null|
C'est mon Dataframe je suis en train de changer de Tesla dans la colonne de S
- par la conversion de RDD avec
.rdd
et à l'aide demap
de changer à 0 si 0,2 ? - Qu'est-ce que la carte de commande pour le changement de 0 si 0,2?
- Et comment puis-je me concentrer sur une colonne spécifique?
- Donnez-nous un exemple de vos données, ce que vous avez essayé jusqu'à présent.
- +----+-----+-----+--------------------+-----+ |année| marque|modèle| commentaire|blanc| +----+-----+-----+--------------------+-----+ |2012|Tesla| S| Pas de commentaire| | |1997| Ford| E350|Aller maintenant en avoir un th...| | |2015| Chevrolet| Volt| null| null| Ceci est mon Dataframe je suis en train de changer de Tesla dans la colonne de S. je viens de commencer à apprendre à Scala. Vraiment reconnaissant de votre aide!
- Éditer votre premier post avec les infos ci-dessus
- Ainsi, à la fin, vous vous attendez à
|2012|S| S|
pour les premières données dans votre exemple? - Oui.Désolé pour le format foiré
- Alors, comment puis-je choisir le "Tesla" et la changer en "s"?
- Je peux changer le type de la colonne en faisant cela, val featureDf = df.withColumn("an2", toInt(df("année"))).sélectionnez("an2", "faire", "modèle", "commentaire", "vide")
- Ne sais toujours pas comment faire pour changer la valeur
- ok. Belle réponse. Si la colonne particulière dans dataframe ont une valeur particulière puis-je changer la valeur dans les autres colonnes dans dataframe.
Vous devez vous connecter pour publier un commentaire.
Note:
Comme mentionné par Olivier Girardot, cette réponse n'est pas optimisé et le
withColumn
solution est celle à utiliser (Azeroth2b réponse)Ne pouvez pas supprimer cette réponse comme il a été acceptée
Ici est mon point de vue sur celui-ci:
Vous pouvez réellement utiliser directement
map
sur leDataFrame
.Donc, fondamentalement, vous cochez la colonne 1 de la Chaîne
tesla
.Si c'est
tesla
, utiliser la valeurS
pourmake
d'autre que vous la valeur actuelle de la colonne 1Puis de construire un n-uplet avec toutes les données de la ligne à l'aide de l'index (de base zéro) (
Row(row(0),make,row(2))
) dans mon exemple)Il y a sans doute une meilleure façon de le faire. Je ne suis pas encore familier avec l'Étincelle parapluie
val newDF = dataframe.map(row => { val row1 = row.getAs[String](1) val make = if (row1.toLowerCase == "tesla") "S" else row1 Row(row(0),make,row(2)) })
qui doit construire de nouveaux DataFrame.toDF()
deRDD
àDataFrame
sqlContext
, vous pouvez utiliser la méthodedef createDataFrame(rowRDD: RDD[Row], schema: StructType): DataFrame
.import sqlContext.implicits._; dataframe.map(row => {val make = row.getAs[String]("make");(row.getAs[Int]("year"), if (make == "tesla") "S" else make,row.getAs[String]("model"), ...)}).toDF("year","make","model", ...)
Étincelle 1.6.2, le code Java (désolé), ce qui va changer à chaque instance de la Tesla S pour l'ensemble de la dataframe sans passer par un RDD:
Édité pour ajouter @marshall245 "autrement" pour s'assurer de la non-Tesla colonnes ne sont pas convertis à la valeur NULL.
Construction de la solution de @Azeroth2b. Si vous souhaitez remplacer seulement un couple de points et de laisser le reste inchangé. Procédez de la manière suivante. Sans l'aide de l'autre(...) la méthode, le reste de la colonne est nulle.
Vieux DataFrame
Nouveau Datarame
Ceci peut être réalisé en dataframes avec des fonctions définies par l'utilisateur (udf).
make
colonnes?df2.na.replace("Nom",la Carte("John" -> "Akshay","Cindy" -> "Jayita")).show()
remplacer dans la classe DataFrameNaFunctions de type [T](col: Chaîne de caractères de remplacement: Carte[T,T])org.apache.spark.sql.DataFrame
Pour l'exécution de cette fonction, vous devez disposer active étincelle objet et le dataframe avec les en-têtes.
import org.apache.spark.sql.DataFrameNaFunctions