Un rappel sur la façon de lire des fichiers sur le stockage d'objets à partir de code Python sur des ordinateurs portables dans l'un des services principaux de Watson Data Platform Data Science Experience (DSX) Il s'agit d'une suite du code Python pour la lecture de données CSV à partir du stockage d'objets DSX, et cette fois, c'est le code d'écriture.
Dans le cas de la lecture précédente, les données à lire étaient claires et les informations d'authentification ont été obtenues à partir de ces données, mais cette fois le but est de tirer le résultat du processus de calcul, il y a donc un conteneur correspondant au projet. Même ainsi, je ne peux pas obtenir les informations d'identification du nom de fichier. Donc qu'est ce que je devrais faire?
Lorsque je me connecte à DSX et que je recherche des informations d'identification pour écrire dans le conteneur à partir du service de données, je ne les trouve nulle part. Cependant, vous pouvez obtenir les informations d'identification du conteneur en vous connectant à partir de Bluemix PaaS et en recherchant des informations de stockage d'objets.
Dans la liste des services, accédez à DSX-Object Storage.
Lorsque les informations d'identification du service DSX-ObjectStorage sont affichées, les informations d'identification du service sont créées pour chaque conteneur, c'est-à-dire pour chaque projet, copiez et utilisez les informations d'identification de service du conteneur correspondant sur le bloc-notes DSX.
Les informations d'identification du service du côté Bluemix n'incluent pas le nom du conteneur, alors ajoutez simplement cette partie manuellement et vous êtes prêt à partir.
from io import BytesIO
import requests
import numpy as np
import json
# Informations d'identification de stockage d'objets
credentials_5 = {
'auth_url':'https://identity.open.softlayer.com',
'project':'object_storage_bc6cdc85_586e_4581_8a09_8f01f7bdf3ed',
'project_id':'2a9de4c1d50944a49f1a46dd53394158',
'region':'dallas',
'user_id':'********************************',
'domain_id':'fb119f3e1bc0469dad2b253b317ec7ea',
'domain_name':'952993',
'username':'***********************************************',
'password':"********************",
'container': 'DefaultProjecttakarajpibmcom' <--- Ajouter à la main
}
def Write_CSV_to_ObjectStorage(credentials, npdata,label, fileName):
"""This functions returns a StringIO object containing
the file content from Bluemix Object Storage V3."""
csvData = ""
# Données d'étiquette écrites sur la première ligne de CSV
c = 0
for col in label:
if c > 0:
csvData = csvData + ','
csvData = csvData + col
c = c + 1
csvData = csvData + "\n"
# Convertir les données du tableau Numpy en données texte au format CSV
rows, cols = np.shape(npdata)
for row in a:
c = 0
for col in row:
if c > 0:
csvData = csvData + ','
csvData = csvData + str(col)
c = c + 1
csvData = csvData + "\n"
#Object Storage Authentification
url1 = ''.join(['https://identity.open.softlayer.com', '/v3/auth/tokens'])
data = {'auth': {'identity': {'methods': ['password'],
'password': {'user': {'name': credentials['username'],'domain': {'id': credentials['domain_id']},
'password': credentials['password']}}}}}
headers1 = {'Content-Type': 'application/json'}
resp1 = requests.post(url=url1, data=json.dumps(data), headers=headers1)
#Quitter quand une erreur d'authentification se produit
if resp1.status_code != 201:
return False, resp1.status_code
resp1_body = resp1.json()
# Ecrire dans le stockage d'objets
for e1 in resp1_body['token']['catalog']:
if(e1['type']=='object-store'):
for e2 in e1['endpoints']:
if(e2['interface']=='public'and e2['region']=='dallas'):
url2 = ''.join([e2['url'],'/', credentials['container'], '/', fileName])
s_subject_token = resp1.headers['x-subject-token']
headers2 = {'X-Auth-Token': s_subject_token, 'accept': 'application/json'}
resp2 = requests.put(url=url2, headers=headers2, data = csvData )
result = True
if resp2.status_code != 201:
print "ERROR ", resp2.status_code
result = False
return result, resp2.status_code
# Principale
# Génération de données
x = np.linspace(0,1,60)
y = np.linspace(10,11,60)
# Tableau bidimensionnel de changements (x, y) en un seul tableau
a = np.stack((x, y), axis=-1)
print a
# Étiquette de données
label = ["Time","Data"]
# Enregistrer dans le stockage d'objets
rslt = Write_CSV_to_ObjectStorage(credentials_5, a, label,"testDataSet.csv")
print rslt
ew
Le premier argument concerne les informations d'identification. Le deuxième argument est un tableau de num.py dans le tableau de données et est inséré dans la première ligne du fichier CSV avec le libellé de la colonne de données. Vient ensuite le nom du fichier (le nom de l'objet stocké dans le conteneur de stockage d'objets).
rslt = Write_CSV_to_ObjectStorage(credentials_5, a, label,"testDataSet.csv")
La valeur de retour sera 201 Created en cas de succès. Sinon, cela échouera.