3
votes

Chargement des données de S3 vers le dataframe Dask

Je ne peux charger les données que si je change le paramètre "anon" sur True après avoir rendu le fichier public.

df = dd.read_csv('s3://mybucket/some-big.csv',  storage_options = {'anon':False})

Ceci n'est pas recommandé pour des raisons évidentes. Comment charger les données de S3 en toute sécurité?


0 commentaires

3 Réponses :


5
votes

Le backend qui charge les données de s3 est s3fs, et il a une section sur les informations d'identification ici , qui vous renvoie principalement à la documentation de boto3.

La réponse courte est, il existe un certain nombre de façons de fournir les informations d'identification S3, dont certaines sont automatiques (un fichier au bon endroit, ou des variables d'environnement - qui doit être accessible à tous les nœuds de calcul ou au service de métadonnées de cluster).

Alternativement, vous pouvez fournir votre clé / secret directement dans l'appel, mais cela doit bien sûr signifier que vous faites confiance à votre plate-forme d'exécution et à la communication entre les travailleurs

df = dd.read_csv('s3://mybucket/some-big.csv',  storage_options = {'key': mykey, 'secret': mysecret})

L'ensemble de paramètres que vous pouvez transmettre dans storage_options lors de l'utilisation de s3fs se trouve dans le Documentation API .

Référence générale http://docs.dask.org/en/latest/remote-data-services.html


0 commentaires

3
votes

Si vous êtes dans votre cloud privé virtuel (VPC), s3 sera probablement déjà identifié et vous pouvez lire le fichier sans clé:

import dask.dataframe as dd
storage_options = {'key': <s3 key>, 'secret': <s3 secret>}
df = dd.read_csv('s3://<bucket>/<path to file>.csv', storage_options=storage_options)

Si vous n'êtes pas identifié, vous pouvez utiliser le paramètre storage_options et transmettre une paire de clés (clé et secret):

import dask.dataframe as dd
df = dd.read_csv('s3://<bucket>/<path to file>.csv')

La documentation complète de dask peut être trouvée ici


0 commentaires

0
votes

Dask sous le capot utilise boto3 afin que vous puissiez à peu près configurer vos clés de toutes les manières dont boto3 prend en charge, par exemple, l'exportation basée sur les rôles AWS_PROFILE = xxxx ou l'exportation explicite de la clé d'accès et du secret via vos variables d'environnement. Je vous déconseille de coder en dur vos clés au moins si vous exposez votre code au public par erreur.

import dask.dataframe as dd

# Given N number of csv files located inside s3 read and compute total record len

s3_url = 's3://<bucket_name>/dask-tutorial/data/accounts.*.csv'

df = dd.read_csv(s3_url)

print(df.head())

print(len(df))

ou

https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

Pour s3, vous pouvez utiliser une correspondance générique pour récupérer plusieurs fichiers fragmentés

$ export AWS_PROFILE=your_aws_cli_profile_name


0 commentaires