Je voudrais supprimer les guillemets doubles "" lorsque la valeur est vide lors de l'enregistrement de mon CSV dans S3 avec la méthode df.write.save () de Spark
Version Spark: 2.4.0
Version Python: 3.6.5
Voici mon code en Python pour charger le fichier csv:
|id|first_name|last_name|zip_code| |1 |"" |Elsner |57315 | |2 |Noelle |"" |"" | |3 |James |Moser |48256 |
Le fichier CSV chargé: p>
df.write.save( path('out'), format = 'csv', delimiter = '|', header = 'true' )
Voici mon code en Python pour écrire le fichier csv:
|id|first_name|last_name|zip_code| |1 | |Elsner |57315 | |2 |Noelle | | | |3 |James |Moser |48256 |
Le fichier CSV écrit:
XXX
Comment supprimer le double guillemet lors de l'inscription?
Merci beaucoup d'avance.
5 Réponses :
Vous avez une chaîne vide dans votre bloc de données, si vous voulez les écrire sous forme de valeurs nulles, vous pouvez remplacer la chaîne vide par null, puis définir nullValues = None
lors de son enregistrement:
id|first_name|last_name|zip_code 1||Elsner|57315 2|Noelle|| 3|James|Moser|48256
Et il sera enregistré sous:
df.replace('', None) # replace empty string with null .write.save( path('out'), format='csv', delimiter='|', header=True, nullValue=None # write null value as None )
Selon Spark documentation , la valeur par défaut de nullValue
et emptyValue
est None
, et se traduira par une chaîne vide.
Pour le définir sur rien réel, comme vous le souhaitez, vous pouvez le définir sur Unicode NULL
:
df.write.save( path('out'), format = 'csv', delimiter = '|', header = True, nullValue = '\u0000', emptyValue = '\u0000' )
Aucune des solutions ci-dessus n'a fonctionné pour moi, mais elles ont été utiles pour me guider dans la bonne direction. Ce qui a fini par fonctionner a été d'ajouter l'option emptyValue = u '\ u0000'
(quand j'ai essayé sans le u
précédent, cela a fini par écrire \ u0000
littéraire au fichier csv)
Si vous cherchez la manière PySpark de faire cela, n'essayez pas d'utiliser l'astuce des chaînes nulles! C'est beaucoup plus simple (une fois que vous connaissez le truc ...)
myDF.coalesce(1).write\ .option("emptyValue", None)\ .option("nullValue", None)\ .csv(outFile)
J'espère que cela aide! Impossible de le trouver documenté nulle part
data.write.format ("csv"). option ("delimiter", "|"). option ("emptyValue", "") .option ("nullValue", "") .option ("header" , "true"). mode ("overwrite"). save ("C: \ data \ test2")