[PYTHON] Führen Sie die API des Cloud Pak für Datenanalyseprojekts Job mit Umgebungsvariablen aus

Im Analyseprojekt Cloud Pak for Data (CP4D) können Notebook und Data Refinery Flow in Jobs konvertiert und stapelweise ausgeführt werden. Was ich diesmal machen möchte, sind die folgenden zwei Punkte.

Genau genommen scheint Job im Ausdruck "Umgebungsvariablen setzen und starten" genauer zu sein als "Argumente zur Laufzeit übergeben". Da es wahrscheinlich intern als OpenShift-Pod startet, gehe ich davon aus, dass die Umgebungsvariable als OpenShift ConfigMap behandelt wird.

Beginnen wir den Job tatsächlich mit der API, geben zu diesem Zeitpunkt Umgebungsvariablen an und übergeben ihn an die Verarbeitungslogik.

Notizbuch erstellen

Erstellen Sie ein Notizbuch und verwandeln Sie es in einen Job. Unter der Annahme, dass diesmal "MYENV1", "MYENV2" und "MYENV3" als Umgebungsvariablen behandelt werden sollen, werden die Werte in einem Pandas-Datenrahmen verarbeitet und als CSV an die Datenbestände des Analyseprojekts ausgegeben. Natürlich sind diese Umgebungsvariablen nicht standardmäßig definiert. Legen Sie daher die Standardwerte in os.getenv als Standard fest.

import os
myenv1 = os.getenv('MYENV1', default='no MYENV1')
myenv2 = os.getenv('MYENV2', default='no MYENV2')
myenv3 = os.getenv('MYENV3', default='no MYENV3')

print(myenv1)
print(myenv2)
print(myenv3)
# -output-
# no MYENV1
# no MYENV2
# no MYENV3

Dann rahmen Sie diese drei Werte mit Pandas ein.

import pandas as pd
df = pd.DataFrame({'myenv1' : [myenv1], 'myenv2' : [myenv2], 'myenv3' : [myenv3]})
df
# -output-
#	myenv1	myenv2	myenv3
# 0	no MYENV1	no MYENV2	no MYENV3

Exportieren Sie als Datenelement für Ihr Analyseprojekt. Fügen Sie dem Dateinamen einen Zeitstempel hinzu. Die Ausgabe von Datenbeständen an das Analyseprojekt ist [dieser Artikel](https://qiita.com/ttsuzuku/items/eac3e4bedc020da93bc1#%E3%83%87%E3%83%BC%E3%82%BF%E8 % B3% 87% E7% 94% A3% E3% 81% B8% E3% 81% AE% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 81% AE% E4% BF % 9D% E5% AD% 98-% E5% 88% 86% E6% 9E% 90% E3% 83% 97% E3% 83% AD% E3% 82% B8% E3% 82% A7% E3% 82% AF% E3% 83% 88).

from project_lib import Project
project = Project.access()
import datetime
now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))).strftime('%Y%m%d_%H%M%S')

project.save_data("jov_env_test_"+now+".csv", df.to_csv(),overwrite=True)

Job erstellen

Wählen Sie im Notebook-Menü Datei> Versionen speichern, um die Version zu speichern. Erforderlich beim Erstellen eines Jobs. Klicken Sie dann oben rechts im Notizbuchbildschirm auf die Schaltfläche Auftrag> Auftrag erstellen. image.png Geben Sie dem Job einen Namen und klicken Sie auf Erstellen. image.png

Job ausführen

Lassen Sie uns den erstellten Job auf dem CP4D-Bildschirm ausführen. Klicken Sie zunächst einfach auf die Schaltfläche "Job ausführen" und führen Sie sie aus, ohne Umgebungsvariablen zu definieren. image.png

OK, wenn der Job ausgeführt wird und "Vollständig" wird. image.png

Mit Blick auf die Datenbestände des Analyseprojekts wird eine CSV-Datei generiert. image.png

Wenn Sie auf den Dateinamen klicken, um die Vorschau anzuzeigen, können Sie sehen, dass der in Notebook festgelegte Standardwert gespeichert ist. image.png

Legen Sie als Nächstes die Umgebungsvariable fest und führen Sie sie aus. Klicken Sie im Jobbildschirm unter "Umgebungsvariablen" auf "Bearbeiten" und legen Sie die folgenden drei Zeilen fest.

MYENV1=1
MYENV2=hoge
MYENV3=10.5

Es ist so. image.png

Versuchen Sie nach dem Übermitteln der Einstellungen erneut, Job auszuführen. Der Inhalt der resultierenden CSV-Datei sieht folgendermaßen aus. image.png Da es sich um eine Umgebungsvariable handelt, wird sie auch dann als Zeichenfolge behandelt, wenn Sie einen numerischen Wert eingeben.

Job mit API ausführen

Verwenden Sie die Anforderungen von Python, um den erstellten Job über die API zu starten. Führen Sie den folgenden Code in der Python-Umgebung außerhalb von CP4D aus.

Authentifizierung

Um das Token zu erhalten, führen Sie die Standardauthentifizierung mit dem Benutzernamen und dem Kennwort durch und rufen Sie das accessToken ab. Zur Authentifizierung [Beispiel für die Ausführung mit Curl im CP4D v2.5-Produkthandbuch](https://www.ibm.com/support/knowledgecenter/ja/SSQNUZ_2.5.0/wsj/analyze-data/ml-authentication- Es gibt local.html).

url = "https://cp4d.hostname.com"
uid = "username"
pw = "password"

import requests

#Authentication
response = requests.get(url+"/v1/preauth/validateAuth", auth=(uid,pw), verify=False).json()
token = response['accessToken']

Die Option verify = False in Anforderungen ist eine Problemumgehung zur Überprüfung von Zertifikaten, wenn CP4D ein selbstsigniertes Zertifikat verwendet.

Jobliste abrufen

Rufen Sie die Jobliste des Analyseprojekts ab. Informieren Sie sich vorab im Voraus über die ID des Analyseprojekts, das auf CP4D verwendet werden soll. Zeigen Sie die Umgebungsvariable PROJECT_ID im Notizbuch Ihres Analyseprojekts an und überprüfen Sie sie.

Untersuchung der Projekt-ID(Auf Notebook auf CP4D ausführen)


import os
os.environ['PROJECT_ID']
# -output-
# 'f3110316-687e-450a-8f17-57296c907973'

Stellen Sie die oben gefundene Projekt-ID ein und rufen Sie die Jobliste mit der API ab. Die API verwendet die Watson Data API. Die API-Referenz lautet Jobs / Liste der Jobs unter einem Projekt abrufen ist.

project_id = 'f3110316-687e-450a-8f17-57296c907973'
headers = {
    'Authorization': 'Bearer ' + token,
    'Content-Type': 'application/json'
}

# Job list
response = requests.get(url+"/v2/jobs?project_id="+project_id, headers=headers, verify=False).json()
response
# -output-
#{'total_rows': 1,
# 'results': [{'metadata': {'name': 'job_env_test',
#    'description': '',
#    'asset_id': 'b05d1214-d684-4bd8-b1fa-cc05a8ccee81',
#    'owner_id': '1000331001',
#    'version': 0},
#   'entity': {'job': {'asset_ref': '6e0b450e-2f9e-4605-88bf-d8a5e2bda4a3',
#     'asset_ref_type': 'notebook',
#     'configuration': {'env_id': 'jupconda36-f3110316-687e-450a-8f17-57296c907973',
#      'env_type': 'notebook',
#      'env_variables': ['MYENV1=1', 'MYENV2=hoge', 'MYENV3=10.5']},
#     'last_run_initiator': '1000331001',
#     'last_run_time': '2020-05-31T22:20:18Z',
#     'last_run_status': 'Completed',
#     'last_run_status_timestamp': 1590963640135,
#     'schedule': '',
#     'last_run_id': 'ebd1c2f1-f7e7-40cc-bb45-5e12f4635a14'}}}]}

Die obige Asset-ID ist die ID des Jobs "job_env_test". Speichern Sie es in einer Variablen.

job_id = "b05d1214-d684-4bd8-b1fa-cc05a8ccee81"

Job ausführen

Führen Sie den obigen Job mit der API aus. Die API-Referenz lautet Jobläufe / Start eines Jobs starten. Sie müssen json zur Laufzeit den Wert job_run geben, einschließlich der Laufzeitumgebungsvariablen hier.

jobrunpost = {
  "job_run": {
      "configuration" : {
          "env_variables" :  ["MYENV1=100","MYENV2=runbyapi","MYENV3=100.0"] 
      }
  }
}

Geben Sie den obigen job_run in json ein, um den Job auszuführen. Die Ausführungs-ID wird in der'asset_id' der Antwort'metadata 'gespeichert.

# Run job
response = requests.post(url+"/v2/jobs/"+job_id+"/runs?project_id="+project_id, headers=headers, json=jobrunpost, verify=False).json()

# Job run id
job_run_id = response['metadata']['asset_id']
job_run_id
# -output-
# 'cedec57a-f9a7-45e9-9412-d7b87a04036a'

Überprüfen Sie den Status der Jobausführung

Überprüfen Sie nach dem Ausführen den Status. Die API-Referenz lautet Jobläufe / Bestimmte Ausführung eines Jobs abrufen ist.

# Job run status
response = requests.get(url+"/v2/jobs/"+job_id+"/runs/"+job_run_id+"?project_id="+project_id, headers=headers, verify=False).json()
response['entity']['job_run']['state']
# -output-
# 'Starting'

Wenn Sie diese request.get mehrmals ausführen, ändert sich das Ergebnis in "Starten" -> "Ausführen" -> "Abgeschlossen". Wenn es "Abgeschlossen" wird, ist die Ausführung abgeschlossen.

Ausführungsergebnis

Kehren Sie zum CP4D-Bildschirm zurück und überprüfen Sie den Inhalt der CSV-Datei, die in den Datenbeständen des Analyseprojekts generiert wurde. image.png

Es wurde bestätigt, dass die in job_run angegebene Umgebungsvariable ordnungsgemäß in den Ergebnisdaten gespeichert ist.

(Bonus) Doppelbytezeichen können auch für den Wert der Umgebungsvariablen job_run verwendet werden.

Job mit Doppelbytezeichen_run


jobrunpost = {
  "job_run": {
      "configuration" : {
          "env_variables" :  ["MYENV1=AIUEO","MYENV2=a-I-U-E-O","MYENV3=Aio"] 
      }
  }
}

Ausführungsergebnis: image.png

Danach können Sie den Wert (die Zeichenfolge) der in Job's Notebook empfangenen Umgebungsvariablen kochen oder backen oder nach Belieben verwenden.

(Referenzmaterial) https://github.ibm.com/GREGORM/CPDv3DeployML/blob/master/NotebookJob.ipynb Dieses Repository enthielt nützliche Beispiele für Notebooks, die mit CP4D verwendet werden können.

Recommended Posts

Führen Sie die API des Cloud Pak für Datenanalyseprojekts Job mit Umgebungsvariablen aus
Protokolldatei mit Job (Notizbuch) von Cloud Pak for Data ausgeben
Stellen Sie Funktionen mit Cloud Pak for Data bereit
Erstellen Sie ein USB-Boot-Ubuntu mit einer Python-Umgebung für die Datenanalyse
Praxis der Erstellung einer Datenanalyseplattform mit BigQuery und Cloud DataFlow (Datenverarbeitung)
Datenanalyse zur Verbesserung von POG 2 ~ Analyse mit Jupiter-Notebook ~
Bereiten Sie eine Programmiersprachenumgebung für die Datenanalyse vor
Speichern Sie Pandas-Daten mit Cloud Pak for Data (Watson Studio) im Excel-Format in Datenbeständen.
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Bereinigen Sie das Cloud-Paket für den Datenbereitstellungsbereich
Aufbau einer Datenanalyseumgebung mit Python (IPython Notebook + Pandas)
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
Analyse der Messdaten ①-Memorandum of Scipy Fitting-
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Datenanalyse mit Python 2
Datenanalyse mit Python
Erstellen Sie eine Datenanalyseumgebung mit Kedro + MLflow + Github-Aktionen
Ablauf des Extrahierens von Text in PDF mit der Cloud Vision API
Empfehlung von Jupyter Notebook, einer Codierungsumgebung für Datenwissenschaftler
Spracherkennung von WAV-Dateien mit der Google Cloud Speech API Beta
Abrufen von Daten aus der Analyse-API mit Google API Client für Python