2 votes

Traitement des collections distribuées de Dask avec du code externe

J'ai des données d'entrée stockées dans un seul grand fichier sur S3. Je veux que Dask découpe le fichier automatiquement, le distribue aux travailleurs et gère le flux de données. D'où l'idée d'utiliser la collecte distribuée, par exemple le sac.

Sur chaque travailleur, j'ai un outil de ligne de commande (Java) qui lit les données du ou des fichiers. Par conséquent, j'aimerais écrire un ensemble de données dans un fichier, appeler un CLI/code externe pour traiter les données, puis lire les résultats dans le fichier de sortie. Cela ressemble au traitement de lots de données au lieu d'un enregistrement à la fois.

Quelle serait la meilleure approche pour résoudre ce problème ? Est-il possible d'écrire une partition sur le disque d'un travailleur et de la traiter dans son ensemble ?

PS. Il n'est pas nécessaire, mais souhaitable, de rester dans un modèle de collecte distribuée car d'autres opérations sur les données pourraient être des fonctions Python plus simples qui traitent les données enregistrement par enregistrement.

3voto

MRocklin Points 2855

Vous voulez probablement le lire_octets fonction. Elle découpe le fichier en plusieurs morceaux proprement séparés par un délimiteur (comme une ligne de fin). Elle vous renvoie une liste de dask.delayed qui pointent vers ces blocs d'octets.

Vous trouverez de plus amples informations sur cette page de documentation : http://dask.pydata.org/en/latest/bytes.html

Voici un exemple tiré de la docstring :

>>> sample, blocks = read_bytes('s3://bucket/2015-*-*.csv', delimiter=b'\n')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X