Exemple pas-à-pas : python, pandas, rclone, ...
On suppose que vous diposez des identifiants permettant d'interagir avec le S3 Mésocentre (paire de clés).
Interaction S3 avec rclone
Commençons par envoyer des données dans un bucket S3.
-
Pour cela, nous allons utiliser l'outil
rclone
que l'on va configurer comme suit en ajoutant dans le fichier~/.config/rclone/rclone.conf
les lignes suivantes :Bien entendu, remplacez les[mesos3] type = s3 provider = Ceph env_auth = false access_key_id = XXXaccess_keyXXX secret_access_key = XXXsecret_keyXXX region = endpoint = https://s3.mesocentre.uca.fr location_constraint = acl = server_side_encryption = storage_class =
XXXXXXX
par vos identifiants personnels (access key, secret key). -
Testons le bon fonctionnement en créant un bucket nommé
myproject-data
pour l'exemple :$ rclone mkdir mesos3:myproject-data
-
Listons nos buckets :
$ rclone lsd mesos3: -1 2023-03-15 09:36:24 -1 myproject-data
-
Nous allons envoyer le fichier
mydata.csv
contenantEnvoyons des données dans ce bucket :Name,Score a,90 b,80 c,95 d,20
Vérifions la présence de notre fichier envoyé :$ rclone copy --progress mydata.csv mesos3:myproject-data/ Transferred: 32 B / 32 B, 100%, 0 B/s, ETA - Transferred: 1 / 1, 100% Elapsed time: 0.3s
$ rclone ls mesos3:myproject-data 32 mydata.csv
Interaction S3 avec Python Pandas
-
Assurez-vous que les modules python nécessaires soient installés dans votre environnement python, par exemple :
$ pip3 install --user s3fs boto3 pandas
-
Prenons cet exemple de script python que l'on nommera
s3pandas.py
:Une exécution du code python nous donne bien le résultat escompté :#!/usr/bin/python3 import pandas as pd s3opts = { "key": "XXXaccess_keyXXX", "secret": "XXXsecret_keyXXX", "endpoint_url": "https://s3.mesocentre.uca.fr" } mydata = pd.read_csv('s3://myproject-data/mydata.csv', storage_options=s3opts) print(mydata)
$ python3 s3pandas.py Name Score 0 a 90 1 b 80 2 c 95 3 d 20
-
Pour ne pas commit ses clés d'accès avec le code, on peut les définir dans des variables d'environnement et les utiliser dans le code python. Adaptons le code python pour aller lire les variables d'environnement :
Dans le terminal, exportons les clés et lançons le code :#!/usr/bin/python3 import os import pandas as pd s3opts = { "key": os.environ['AWS_ACCESS_KEY_ID'], "secret": os.environ['AWS_SECRET_ACCESS_KEY'], "endpoint_url": "https://s3.mesocentre.uca.fr" } mydata = pd.read_csv('s3://myproject-data/mydata.csv', storage_options=s3opts) print(mydata)
$ export AWS_ACCESS_KEY_ID=XXXaccess_keyXXX $ export AWS_SECRET_ACCESS_KEY=XXXsecret_keyXXX $ python3 s3pandas.py Name Score 0 a 90 1 b 80 2 c 95 3 d 20
-
Modifions les données et enregistrons-les dans un nouvel objet
output01.csv
sur le stockage S3 :L'exécution donne :#!/usr/bin/python3 import os import pandas as pd s3opts = { "key": os.environ['AWS_ACCESS_KEY_ID'], "secret": os.environ['AWS_SECRET_ACCESS_KEY'], "endpoint_url": "https://s3.mesocentre.uca.fr" } mydata = pd.read_csv('s3://myproject-data/mydata.csv', storage_options=s3opts) mydata['Score'] *= 2 print(mydata) mydata.to_csv('s3://myproject-data/output01.csv', storage_options=s3opts)
$ python3 s3pandas.py Name Score 0 a 180 1 b 160 2 c 190 3 d 40
-
Vérifions la présence de l'objet nouvellement enregistré sur le S3 avec
rclone
:Affichons son contenu :$ rclone ls mesos3:myproject-data 32 mydata.csv 43 output01.csv
$ rclone cat mesos3:myproject-data/output01.csv ,Name,Score 0,a,180 1,b,160 2,c,190 3,d,40
Notez que vos données distantes sur votre compte S3 peuvent être gérées par d'autres logiciels que rclone ; on peut citer par exemple :
Le dashboard OSCAR propose un accès direct aux buckets et aux objets via l'interface web, dans la section Project --> Object Store --> Containers.
La documentation du Mésocentre présente des détails sur
Note : erreur endpoint_url
dans s3fs/boto
Pour certaines anciennes versions de S3Fs / boto, la structure du s3opts est plutôt :
s3opts = { "key": os.environ['AWS_ACCESS_KEY_ID'],
"secret": os.environ['AWS_SECRET_ACCESS_KEY'],
'client_kwargs': { "endpoint_url": "https://s3.mesocentre.uca.fr" } }