Je viens du milieu des pandas et j'ai l'habitude de lire les données des fichiers CSV dans une trame de données, puis de changer simplement les noms de colonne en quelque chose d'utile à l'aide de la commande simple:
df.columns = new_column_name_list
Cependant, la même chose ne fonctionne pas dans les cadres de données pyspark créés à l'aide de sqlContext. La seule solution que j'ai pu trouver pour le faire facilement est la suivante:
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', inferschema='true', delimiter='\t').load("data.txt")
oldSchema = df.schema
for i,k in enumerate(oldSchema.fields):
k.name = new_column_name_list[i]
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', delimiter='\t').load("data.txt", schema=oldSchema)
Il s'agit essentiellement de définir la variable deux fois et de déduire le schéma en premier, puis de renommer les noms de colonne, puis de charger à nouveau le cadre de données avec le schéma mis à jour.
Existe-t-il un moyen meilleur et plus efficace de procéder comme nous le faisons chez les pandas?
Ma version spark est 1.5.0
la source
for
boucle +withColumnRenamed
, mais votrereduce
option est très sympa :)from functools import reduce
Avantage d'utiliser de cette façon: Avec une longue liste de colonnes, vous ne souhaitez modifier que quelques noms de colonnes. Cela peut être très pratique dans ces scénarios. Très utile pour joindre des tables avec des noms de colonne en double.
la source
Si vous souhaitez modifier tous les noms de colonnes, essayez
df.toDF(*cols)
la source
df = df.toDF(*my_pandas_df.columns)
cols
les nouveaux noms de colonne et en supposant simplement que l'ordre des noms danscols
correspond à l'ordre des colonnes de la trame de données?Dans le cas où vous souhaitez appliquer une transformation simple sur tous les noms de colonnes, ce code fait l'affaire: (je remplace tous les espaces par un trait de soulignement)
Merci à @ user8117731 pour l'
toDf
astuce.la source
Si vous souhaitez renommer une seule colonne et conserver le reste tel quel:
la source
df.withColumnRenamed('age', 'age2')
la source
withColumnRenamed
.c'est l'approche que j'ai utilisée:
créer une session pyspark:
créer un cadre de données:
afficher df avec les noms des colonnes:
créer une liste avec de nouveaux noms de colonnes:
changez les noms des colonnes du df:
afficher df avec de nouveaux noms de colonnes:
la source
J'ai créé une fonction facile à utiliser pour renommer plusieurs colonnes pour une trame de données pyspark, au cas où quelqu'un voudrait l'utiliser:
la source
old_columns
serait la même chose quedf.columns
.Une autre façon de renommer une seule colonne (en utilisant
import pyspark.sql.functions as F
):la source
J'utilise celui-ci:
la source
Vous pouvez utiliser la fonction suivante pour renommer toutes les colonnes de votre trame de données.
Si vous ne devez mettre à jour que les noms de quelques colonnes, vous pouvez utiliser le même nom de colonne dans la liste replace_with
Pour renommer toutes les colonnes
Pour renommer certaines colonnes
la source
Pour renommer une seule colonne, vous pouvez toujours utiliser toDF (). Par exemple,
la source
Nous pouvons utiliser différentes approches pour renommer le nom de la colonne.
Commençons par créer un DataFrame simple.
Essayons maintenant de renommer col_1 en col_3. PFB quelques approches pour faire de même.
Voici la sortie.
J'espère que ça aide.
la source