Nouveau sur dask
, j'ai un 1GB
Fichier CSV quand je le lis dans dask
dataframe il crée environ 50 partitions après mes modifications dans le fichier quand j'écris, il crée autant de fichiers que de partitions.
Existe-t-il un moyen d'écrire toutes les partitions dans un seul fichier CSV et existe-t-il un moyen d'accéder aux partitions?
Je vous remercie.
Non, Dask.dataframe.to_csv écrit uniquement des fichiers CSV dans différents fichiers, un fichier par partition. Cependant, il existe des moyens de contourner cela.
Peut-être juste concaténer les fichiers après que dask.dataframe les ait écrits? Cela est susceptible d'être presque optimal en termes de performances.
df.to_csv('/path/to/myfiles.*.csv')
from glob import glob
filenames = glob('/path/to/myfiles.*.csv')
with open('outfile.csv', 'w') as out:
for fn in filenames:
with open(fn) as f:
out.write(f.read()) # maybe add endline here as well?
Cependant, vous pouvez le faire vous-même en utilisant dask.delayed , par en utilisant dask.delayed avec des dataframes
Cela vous donne une liste de valeurs différées que vous pouvez utiliser comme vous le souhaitez:
list_of_delayed_values = df.to_delayed()
C'est ensuite à vous de structurer un calcul pour écrire ces partitions séquentiellement dans un seul fichier. Ce n'est pas difficile à faire, mais peut provoquer un peu de sauvegarde sur le planificateur.
Édition 1: (Le 23 octobre 2019)
Dans Dask 2.6.x, il existe un paramètre comme single_file
. Par défaut, c'est False
. Vous pouvez le définir True
pour obtenir une sortie de fichier unique sans utiliser df.compute()
.
Par exemple:
df.to_csv('/path/to/myfiles.csv', single_file = True)
Référence: Documentation pour to_csv
vous pouvez convertir votre dataframe dask en un pandas dataframe avec la fonction compute
puis utiliser le to_csv
. quelque chose comme ça:
df_dask.compute (). to_csv ('csv_path_file.csv')