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
for
boucle +withColumnRenamed
, mais votrereduce
option est très sympa :)