Freigeben über


Bewährte Softwareentwicklungsmethoden für Notebooks

Dieser Artikel enthält eine praktische exemplarische Vorgehensweise, die veranschaulicht, wie Sie bewährte Methoden der Softwareentwicklung auf Ihre Azure Databricks-Notizbücher anwenden, einschließlich Versionskontrolle, Codefreigabe, Testen und optional kontinuierliche Integration sowie kontinuierliche Bereitstellung (CI/CD).

In dieser exemplarischen Vorgehensweise führen Sie Folgendes aus:

  • Fügen Sie Notizbücher zu Azure Databricks Git-Ordnern für die Versionssteuerung hinzu.
  • Extrahiere Teile des Codes aus einem der Notebooks in ein freigabefähiges Modul.
  • Freigegebenen Code testen
  • Führen Sie die Notizbücher in einem Azure Databricks-Job aus.
  • Optional kann CI/CD auf den freigegebenen Code angewendet werden.

Anforderungen

Für die Durchführung dieser Anleitung müssen folgende Ressourcen bereitgestellt werden:

  • Ein Remoterepository mit einem von Databricks unterstützten Git-Anbieter. Die Anleitung in diesem Artikel verwendet GitHub. Bei dieser exemplarischen Vorgehensweise wird davon ausgegangen, dass Sie über ein GitHub Repository mit dem Namen best-notebooks verfügen. (Sie können Ihrem Repository einen anderen Namen geben. Ersetzen Sie in diesem Fall best-notebooks durch den Namen Ihres Repositorys.) Erstellen Sie ein GitHub-Repository, falls Sie noch keines haben.

    Hinweis

    Wenn Sie ein neues Repository erstellen, stellen Sie sicher, dass Sie das Repository mit mindestens einer Datei initialisieren, z. B. mit einer README-Datei.

  • Ein Azure Databricks Workspace. Erstellen Sie einen Arbeitsbereich, falls noch keiner vorhanden ist.

  • Ein Azure Databricks Allzweck-Cluster im Arbeitsbereich. Um Notebooks während der Entwurfsphase auszuführen, hängen Sie die Notebooks an einen laufenden Universalcluster an. Später verwendet diese Anleitung einen Azure Databricks job, um die Ausführung der Notizbücher auf diesem Cluster zu automatisieren. (Sie können auch Aufträge auf Auftragsclustern ausführen, die nur für die Lebensdauer der Aufträge vorhanden sind.) Erstellen Sie einen allzweckbezogenen Cluster , wenn Sie noch kein Cluster besitzen.

Schritt 1: Einrichten von Databricks Git-Ordnern

In diesem Schritt verbinden Sie Ihr vorhandenes GitHub Repository mit Azure Databricks Git-Ordnern in Ihrem vorhandenen Azure Databricks Arbeitsbereich.

Damit Ihr Arbeitsbereich eine Verbindung mit Ihrem GitHub Repository herstellen kann, müssen Sie zuerst Ihren Arbeitsbereich mit Ihren GitHub Anmeldeinformationen bereitstellen, sofern dies noch nicht geschehen ist.

Schritt 1.1: Bereitstellen Ihrer GitHub Anmeldeinformationen

  1. Klicken Sie oben rechts im Arbeitsbereich auf Ihren Benutzernamen, und klicken Sie dann in der Dropdownliste auf "Einstellungen ".
  2. Klicken Sie in der Randleiste Einstellungen unter Benutzer auf Verknüpfte Konten.
  3. Wählen Sie unter Git-Integration für Git-AnbieterGitHub aus.
  4. Klicken Sie auf Persönliches Zugriffstoken.
  5. Geben Sie für Git-Anbieterbenutzername oder E-Mail Ihren GitHub Benutzernamen ein.
  6. Geben Sie für Token Ihr GitHub persönliches Zugriffstoken (klassisch) ein. Dieses persönliche Zugriffstoken (klassisch) muss über Berechtigungen für das Repository und den Workflow verfügen.
  7. Klicken Sie auf Speichern.

Schritt 1.2: Herstellen einer Verbindung mit Ihrem GitHub Repository

  1. Klicken Sie auf der Randleiste des Arbeitsbereichs auf Arbeitsbereich.
  2. Erweitern Sie im Arbeitsbereich-Browser den Bereich Arbeitsbereichs->Benutzer.
  3. Klicken Sie mit der rechten Maustaste auf den Ordner mit Ihrem Benutzernamen, und klicken Sie dann auf Erstellen > Git-Ordner.
  4. Führen Sie im Dialogfeld Git-Ordner erstellen Folgendes aus:
    1. Geben Sie für Git-Repository-URL das GitHub Clone mit HTTPS-URL für Ihr GitHub Repository ein. In diesem Artikel wird davon ausgegangen, dass Ihre URL mit best-notebooks.git endet, z. B. https://github.com/<your-GitHub-username>/best-notebooks.git.
    2. Wählen Sie für Git-AnbieterGitHub aus.
    3. Behalten Sie den Git-Ordnernamen so bei, wie er im Repository festgelegt ist, zum Beispiel ().
    4. Klicken Sie auf Git-Ordner erstellen.

Schritt 2: Importieren und Ausführen des Notebooks

In diesem Schritt importieren Sie ein vorhandenes externes Notebook in Ihr Repository. Sie könnten zwar auch Ihre eigenen Notebooks für diese exemplarische Vorgehensweise erstellen, um Zeit zu sparen, stellen wir Ihnen hier aber einige zur Verfügung.

Schritt 2.1: Erstellen eines Arbeitszweigs im Repository

In diesem Teilschritt erstellen Sie einen Branch namens eda in Ihrem Repository. Mit dieser Verzweigung können Sie unabhängig von der Verzweigung Ihres Repositorys main an Dateien und Code arbeiten, was eine bewährte Methode für Softwaretechnik ist. (Sie können Ihrem Branch auch einen anderen Namen geben.)

Hinweis

In einigen Repositorys kann der main-Branch stattdessen die Bezeichnung master erhalten. Ersetzen Sie in diesem Fall main in dieser Anleitung durch master.

Tipp

Wenn Sie mit der Arbeit in Git Branches nicht vertraut sind, lesen Sie Git Branches - Branches in einer Nutshell auf der Git-Website.

  1. Der Git-Ordner aus Schritt 1.2 sollte geöffnet sein. Wenn nicht, erweitern Sie in der Randleiste des Arbeitsbereichs den Bereich Arbeitsbereich > Benutzer und anschließend den Ordner mit Ihrem Benutzernamen, und klicken Sie auf Ihren Git-Ordner.

  2. Klicken Sie in der Navigationsleiste für den Arbeitsbereich neben dem Ordnernamen auf die Schaltfläche des Git-Branch main.

  3. Klicken Sie im Dialogfeld best-notebooks auf die Schaltfläche Branch erstellen.

    Hinweis

    Wenn Ihr Repository einen anderen Namen als best-notebooks hat, wird sich der Titel dieses Dialogfelds hier und in dieser exemplarischen Vorgehensweise unterscheiden.

  4. Geben Sie eda ein, und klicken Sie auf Erstellen.

  5. Schließen Sie dieses Dialogfeld.

Schritt 2.2: Importieren des Notebooks in das Repository

In diesem Teilschritt importieren Sie ein vorhandenes Notebook aus einem anderen Repository in Ihr Repository. Dieses Notebook führt folgende Aktionen aus:

  • Kopiert eine CSV-Datei aus dem repository owid/covid-19-data GitHub in einen Cluster in Ihrem Arbeitsbereich. Diese CSV-Datei enthält öffentliche Daten zu COVID-19-Krankenhausaufenthalten und Intensivpflegemetriken aus der ganzen Welt.
  • Liest den Inhalt der CSV-Datei in einen PandasDataFrame.
  • Filtert die Daten so, dass sie nur Metriken aus den Vereinigten Staaten enthalten.
  • Anzeigen eines Plots der Daten
  • Speichert das Pandas-DataFrame als Pandas-API auf SparkDataFrame.
  • Führt eine Datenbereinigung auf dem Pandas-API-on-Spark DataFrame durch.
  • Schreibt den Pandas-API-on-Spark-Datenrahmen als Delta-Tabelle in Ihren Arbeitsbereich.
  • Zeigt den Inhalt der Delta-Tabelle an.

Zwar könnten Sie ein eigenes Notebook in Ihrem Repository erstellen, jedoch beschleunigt das Importieren eines vorhandenen Notebooks diesen Durchgang. Wenn Sie ein Notebook in diesem Branch erstellen oder ein vorhandenes Notebook in diesen Branch verschieben möchten, anstatt ein Notebook zu importieren, lesen Sie Grundlegende Verwendung von Arbeitsbereichsdateien.

  1. Klicken Sie im Git-Ordner best-notebooks auf Erstellen > Ordner.
  2. Geben Sie im Dialogfeld Neuer Ordner den Namen notebooks ein, und klicken Sie anschließend auf Erstellen.
  3. Klicken Sie im Ordner Notebooks auf das Dreipunktmenü und dann auf Import.
  4. Im Dialogfeld "Importieren ":
    1. Wählen Sie unter Importieren aus die Option URL aus.

    2. Geben Sie die URL zum rohen Inhalt des Notizbuchs covid_eda_raw im Repository databricks/notebook-best-practices in GitHub ein. Diese URL erhalten Sie wie folgt: i. Wechseln Sie zu https://github.com/databricks/notebook-best-practices. ii. Klicken Sie auf den Ordner notebooks. iii. Klicken Sie auf die Datei covid_eda_raw.py. Iv. Klicken Sie auf Roh. v. Kopieren Sie die vollständige URL aus der Adressleiste Ihres Webbrowsers in das Dialogfeld "Importieren ".

      Hinweis

      Das Dialogfeld Importieren funktioniert nur mit Git-URLs für öffentliche Repositorys.

    3. Klicken Sie auf Importieren.

Schritt 2.3: Ausführen des Notebooks

  1. Wenn das Notebook noch nicht angezeigt wird, öffnen Sie den Ordner Notebooks, und klicken Sie dann auf das Notebook covid_eda_raw innerhalb des Ordners.
  2. Wählen Sie den Cluster aus, an den Sie dieses Notebook anfügen möchten. Anweisungen zum Erstellen eines Clusters finden Sie unter Erstellen eines Clusters.
  3. Klicken Sie auf Alle ausführen.
  4. Warten Sie, während das Notebook läuft.

Nach Abschluss der Notebookausführung sollten im Notebook ein Plot der Daten sowie über 600 Zeilen an Rohdaten in der Delta-Tabelle angezeigt werden. Wenn der Cluster beim Starten dieses Notebooks noch nicht aktiv war, kann es mehrere Minuten dauern, bis der Cluster gestartet wurde und Ergebnisse angezeigt werden.

Schritt 2.4: Einchecken und Zusammenführen des Notebooks

In diesem Unterschritt speichern Sie Ihre Arbeit bisher in Ihrem GitHub Repository. Anschließend fügen Sie das Notizbuch von Ihrem Arbeits-Branch in den Branch Ihres Repositorys main zusammen.

  1. Klicken Sie auf die Git-Branch-Schaltfläche eda neben dem Namen des Notizbuchs.
  2. Stellen Sie im Dialogfeld best-notebooks auf der Registerkarte Änderungen sicher, dass die Datei notebooks/covid_eda_raw.py ausgewählt ist.
  3. Geben Sie für Commit-Nachricht (erforderlich)Added raw notebook ein.
  4. Geben Sie unter Beschreibung (erforderlich) Folgendes ein: This is the first version of the notebook.
  5. Klicken Sie auf Commit & Push.
  6. Klicken Sie im Banner auf den Link für die Pull-Anfrage in Eine Pull-Anfrage bei Ihrem Git-Anbieter erstellen.
  7. Erstellen Sie in GitHub die Pullanforderung, und führen Sie dann die Pullanforderung in der Verzweigung main zusammen.
  8. Gehen Sie zurück in Ihren Azure Databricks-Arbeitsbereich und schließen Sie das Dialogfeld best-notebooks, wenn es weiterhin angezeigt wird.

Schritt 3: Verschieben von Code in ein freigegebenes Modul

In diesem Schritt verschieben Sie einen Teil des Codes aus Ihrem Notebook in eine Reihe freigegebener Funktionen außerhalb Ihres Notebooks. Dadurch können Sie diese Funktionen mit anderen ähnlichen Notebooks verwenden, was sowohl die zukünftige Programmierung beschleunigen als auch dazu beitragen kann, besser planbare und konsistentere Notebookergebnisse zu erhalten. Durch Freigeben dieses Codes können Sie die Funktionen außerdem einfacher testen. Hierbei handelt es sich um eine bewährte Softwareentwicklungsmethode, die im weiteren Verlauf zur allgemeinen Verbesserung der Codequalität beitragen kann.

Schritt 3.1: Erstellen eines weiteren Arbeitszweigs im Repository

  1. Klicken Sie auf die Git-Branch-Schaltfläche eda neben dem Namen des Notizbuchs.
  2. Klicken Sie im Dialogfeld best-notebooks neben dem Branch eda auf den Dropdownpfeil, und wählen Sie main aus.
  3. Klicken Sie auf die Schaltfläche Ziehen. Wenn Sie aufgefordert werden, mit dem Pullen fortzufahren, klicken Sie auf Bestätigen.
  4. Klicken Sie auf die Schaltfläche Branch erstellen.
  5. Geben Sie first_modules ein, und klicken Sie anschließend auf Erstellen. (Sie können Ihrem Branch auch einen anderen Namen geben.)
  6. Schließen Sie dieses Dialogfeld.

Schritt 3.2: Importieren des Notebooks in das Repository

Um diesen Leitfaden zu beschleunigen, importieren Sie in diesem Teilschritt ein weiteres vorhandenes Notebook in Ihr Repo. Dieses Notebook führt die gleichen Aktionen aus wie das vorherige Notebook. Der einzige Unterschied besteht darin, dass dieses Notebook freigegebene Codefunktionen aufruft, die außerhalb des Notebooks gespeichert sind. Auch hier könnten Sie wieder ein eigenes Notebook in Ihrem Repository erstellen und die Codefreigabe selbst durchführen.

  1. Klicken Sie im Browser Arbeitsbereich mit der rechten Maustaste auf den Notebooks-Ordner, und klicken Sie dann auf Importieren.
  2. Im Dialogfeld "Importieren ":
    1. Wählen Sie unter Importieren aus die Option URL aus.

    2. Geben Sie die URL zum rohen Inhalt des Notizbuchs covid_eda_modular im Repository databricks/notebook-best-practices in GitHub ein. Diese URL erhalten Sie wie folgt: i. Wechseln Sie zu https://github.com/databricks/notebook-best-practices. ii. Klicken Sie auf den Ordner notebooks. iii. Klicken Sie auf die Datei covid_eda_modular.py. Iv. Klicken Sie auf Roh. v. Kopieren Sie die vollständige URL aus der Adressleiste Ihres Webbrowsers in das Dialogfeld " Notizbücher importieren ".

      Hinweis

      Das Dialogfeld Notebooks importieren funktioniert nur mit Git-URLs für öffentliche Repositorys.

    3. Klicken Sie auf Importieren.

Schritt 3.3: Hinzufügen der unterstützenden gemeinsam genutzten Codefunktionen des Notizbuchs

  1. Klicken Sie im Arbeitsbereich-Browser mit der rechten Maustaste auf den Git-Ordner best-notebooks, und klicken Sie dann auf Erstellen > Ordner.

  2. Geben Sie im Dialogfeld Neuer Ordner den Namen covid_analysis ein, und klicken Sie anschließend auf Erstellen.

  3. Klicken Sie im Ordner covid_analysis auf Erstellen > Datei.

  4. Geben Sie im Dialogfeld Neuer Dateiname den Namen transforms.py ein, und klicken Sie anschließend auf Datei erstellen.

  5. Geben Sie im Editorfenster transforms.py den folgenden Code ein:

    import pandas as pd
    
    # Filter by country code.
    def filter_country(pdf, country="USA"):
      pdf = pdf[pdf.iso_code == country]
      return pdf
    
    # Pivot by indicator, and fill missing values.
    def pivot_and_clean(pdf, fillna):
      pdf["value"] = pd.to_numeric(pdf["value"])
      pdf = pdf.fillna(fillna).pivot_table(
        values="value", columns="indicator", index="date"
      )
      return pdf
    
    # Create column names that are compatible with Delta tables.
    def clean_spark_cols(pdf):
      pdf.columns = pdf.columns.str.replace(" ", "_")
      return pdf
    
    # Convert index to column (works with pandas API on Spark, too).
    def index_to_col(df, colname):
      df[colname] = df.index
      return df
    

Tipp

Weitere Codefreigabetechniken finden Sie unter Freigeben von Code zwischen Databricks-Notebooks.

Schritt 3.4: Hinzufügen der Abhängigkeiten des freigegebenen Codes

Der vorangehende Code verfügt über mehrere Python Paketabhängigkeiten, damit der Code ordnungsgemäß ausgeführt werden kann. In diesem Teilschritt werden die Paketabhängigkeiten deklariert. Das Deklarieren von Abhängigkeiten verbessert die Reproduzierbarkeit durch die Verwendung präzise definierter Versionen von Bibliotheken.

  1. Klicken Sie im Arbeitsbereich-Browser mit der rechten Maustaste auf den Git-Ordner best-notebooks, und klicken Sie dann auf Erstellen > Datei.

    Hinweis

    Sie möchten, dass die Datei, die die Paketabhängigkeiten auflistet, in den Stammordner des Git-Ordners und nicht in die Ordner notebooks oder covid_analysis gelangt.

  2. Geben Sie im Dialogfeld Neuer Dateiname den Namen requirements.txt ein, und klicken Sie anschließend auf Datei erstellen.

  3. Geben Sie im Editorfenster requirements.txt den folgenden Code ein:

    Hinweis

    Sollte die Datei requirements.txt nicht angezeigt werden, müssen Sie möglicherweise Ihren Webbrowser aktualisieren.

    -i https://pypi.org/simple
    attrs==21.4.0
    cycler==0.11.0
    fonttools==4.33.3
    iniconfig==1.1.1
    kiwisolver==1.4.2
    matplotlib==3.5.1
    numpy==1.22.3
    packaging==21.3
    pandas==1.4.2
    pillow==9.1.0
    pluggy==1.0.0
    py==1.11.0
    py4j==0.10.9.3
    pyarrow==7.0.0
    pyparsing==3.0.8
    pyspark==3.2.1
    pytest==7.1.2
    python-dateutil==2.8.2
    pytz==2022.1
    six==1.16.0
    tomli==2.0.1
    wget==3.2
    

    Hinweis

    In der obigen Datei sind spezifische Paketversionen aufgeführt. Um die Kompatibilität zu verbessern, können Sie diese Versionen mit den Versionen abgleichen, die in Ihrem Universalcluster installiert sind. Lesen Sie den Abschnitt "Systemumgebung" für die Databricks-Runtime-Version Ihres Clusters in den Versionshinweisen und Kompatibilitätshinweisen zur Databricks-Runtime.

Ihr Repository sollte nun wie folgt strukturiert sein:

|-- covid_analysis
│  └── transforms.py
├── notebooks
│  ├── covid_eda_modular
│  └── covid_eda_raw (optional)
└── requirements.txt

Schritt 3.5: Ausführen des umgestalteten Notebooks

In diesem Teilschritt führen Sie das Notebook covid_eda_modular aus, wodurch der freigegebene Code in covid_analysis/transforms.py aufgerufen wird.

  1. Klicken Sie im Arbeitsbereich-Browser auf das Notebook covid_eda_modular im Ordner Notebooks.
  2. Wählen Sie den Cluster aus, an den Sie dieses Notebook anfügen möchten.
  3. Klicken Sie auf Alle ausführen.
  4. Warten Sie, während das Notebook läuft.

Nach Abschluss der Ausführung sollten im Notebook ähnliche Ergebnisse angezeigt werden wie im Notebook covid_eda_raw: Ein Diagramm der Daten und mehr als 600 Zeilen Rohdaten in der Delta-Tabelle. Der Hauptunterschied zu diesem Notebook besteht darin, dass ein anderer Filter verwendet wird (ein iso_code mit DZA anstelle von USA). Wenn der Cluster beim Starten dieses Notebooks noch nicht aktiv war, kann es mehrere Minuten dauern, bis der Cluster gestartet wurde und Ergebnisse angezeigt werden.

  1. Klicken Sie neben dem Notizbuchnamen auf die Git-Branch-Schaltfläche first_modules.
  2. Stellen Sie im Dialogfeld best-notebooks auf der Registerkarte Änderungen sicher, dass Folgendes ausgewählt ist:
    • requirements.txt
    • covid_analysis/transforms.py
    • Notebooks/covid_eda_modular.py
  3. Geben Sie für Commit-Nachricht (erforderlich)Added refactored notebook ein.
  4. Geben Sie unter Beschreibung (erforderlich) Folgendes ein: This is the second version of the notebook.
  5. Klicken Sie auf Commit & Push.
  6. Klicken Sie im Banner auf den Link für die Pull-Anfrage in Eine Pull-Anfrage bei Ihrem Git-Anbieter erstellen.
  7. Erstellen Sie in GitHub die Pullanforderung, und führen Sie dann die Pullanforderung in der Verzweigung main zusammen.
  8. Gehen Sie zurück in Ihren Azure Databricks-Arbeitsbereich und schließen Sie das Dialogfeld best-notebooks, wenn es weiterhin angezeigt wird.

Schritt 4: Testen des freigegebenen Codes

In diesem Schritt testen Sie den freigegebenen Code aus dem letzten Schritt. Sie möchten diesen Code jedoch testen, ohne das Notebook covid_eda_modular selbst auszuführen. Der Grund: Sollte der freigegebene Code nicht erfolgreich ausgeführt werden, wird wahrscheinlich auch das Notebook selbst nicht erfolgreich ausgeführt. Sie möchten daher zuerst Fehler in Ihrem freigegebenen Code abfangen, bevor später Ihr primäres Notebook fehlschlägt. Diese Testtechnik ist eine bewährte Softwareentwicklungsmethode.

Tipp

Weitere Ansätze zum Testen von Notebooks sowie zum Testen von R- und Scala-Notebooks finden Sie unter Komponententests für Notebooks.

Schritt 4.1: Erstellen eines weiteren Arbeitsbranchs im Repository

  1. Klicken Sie neben dem Notizbuchnamen auf die Git-Branch-Schaltfläche first_modules.
  2. Klicken Sie im Dialogfeld best-notebooks neben dem Branch first_modules auf den Dropdownpfeil, und wählen Sie main aus.
  3. Klicken Sie auf die Schaltfläche Ziehen. Wenn Sie aufgefordert werden, mit dem Pullen fortzufahren, klicken Sie auf Bestätigen.
  4. Klicke auf Branch erstellen.
  5. Geben Sie first_tests ein, und klicken Sie anschließend auf Erstellen. (Sie können Ihrem Branch auch einen anderen Namen geben.)
  6. Schließen Sie dieses Dialogfeld.

Schritt 4.2: Hinzufügen der Tests

In diesem Teilschritt wird Ihr Code mithilfe des Frameworks pytest getestet. Bei diesen Tests wird mittels assert überprüft, ob bestimmte Testergebnisse erzielt werden. Sollte einer der Tests ein unerwartetes Ergebnis liefern, schlägt die Assertion fehl und damit fällt auch der Test selbst durch.

  1. Klicken Sie im Arbeitsbereich-Browser mit der rechten Maustaste auf Ihren Git-Ordner und dann auf Erstellen > Ordner.

  2. Geben Sie im Dialogfeld Neuer Ordner den Namen tests ein, und klicken Sie anschließend auf Erstellen.

  3. Klicken Sie im Ordner tests auf Erstellen > Datei.

  4. Geben Sie im Dialogfeld Neuer Dateiname den Namen testdata.csv ein, und klicken Sie anschließend auf Datei erstellen.

  5. Geben Sie im Editorfenster testdata.csv folgende Testdaten ein:

    entity,iso_code,date,indicator,value
    United States,USA,2022-04-17,Daily ICU occupancy,
    United States,USA,2022-04-17,Daily ICU occupancy per million,4.1
    United States,USA,2022-04-17,Daily hospital occupancy,10000
    United States,USA,2022-04-17,Daily hospital occupancy per million,30.3
    United States,USA,2022-04-17,Weekly new hospital admissions,11000
    United States,USA,2022-04-17,Weekly new hospital admissions per million,32.8
    Algeria,DZA,2022-04-18,Daily ICU occupancy,1010
    Algeria,DZA,2022-04-18,Daily ICU occupancy per million,4.5
    Algeria,DZA,2022-04-18,Daily hospital occupancy,11000
    Algeria,DZA,2022-04-18,Daily hospital occupancy per million,30.9
    Algeria,DZA,2022-04-18,Weekly new hospital admissions,10000
    Algeria,DZA,2022-04-18,Weekly new hospital admissions per million,32.1
    
  6. Klicken Sie im Ordner tests auf Erstellen > Datei.

  7. Geben Sie im Dialogfeld Neuer Dateiname den Namen transforms_test.py ein, und klicken Sie anschließend auf Datei erstellen.

  8. Geben Sie in Editorfenster transforms_test.py den folgenden Testcode ein. Bei diesen Tests kommen sowohl pytestStandardkomponenten als auch ein nachgebildeter In-Memory-Pandas-DataFrame zum Einsatz.

    # Test each of the transform functions.
    import pytest
    from textwrap import fill
    import os
    import pandas as pd
    import numpy as np
    from covid_analysis.transforms import *
    from pyspark.sql import SparkSession
    
    @pytest.fixture
    def raw_input_df() -> pd.DataFrame:
      """
      Create a basic version of the input dataset for testing, including NaNs.
      """
      return pd.read_csv('tests/testdata.csv')
    
    @pytest.fixture
    def colnames_df() -> pd.DataFrame:
      df = pd.DataFrame(
        data=[[0,1,2,3,4,5]],
        columns=[
          "Daily ICU occupancy",
          "Daily ICU occupancy per million",
          "Daily hospital occupancy",
          "Daily hospital occupancy per million",
          "Weekly new hospital admissions",
          "Weekly new hospital admissions per million"
        ]
      )
      return df
    
    # Make sure the filter works as expected.
    def test_filter(raw_input_df):
      filtered = filter_country(raw_input_df)
      assert filtered.iso_code.drop_duplicates()[0] == "USA"
    
    # The test data has NaNs for Daily ICU occupancy; this should get filled to 0.
    def test_pivot(raw_input_df):
      pivoted = pivot_and_clean(raw_input_df, 0)
      assert pivoted["Daily ICU occupancy"][0] == 0
    
    # Test column cleaning.
    def test_clean_cols(colnames_df):
      cleaned = clean_spark_cols(colnames_df)
      cols_w_spaces = cleaned.filter(regex=(" "))
      assert cols_w_spaces.empty == True
    
    # Test column creation from index.
    def test_index_to_col(raw_input_df):
      raw_input_df["col_from_index"] = raw_input_df.index
      assert (raw_input_df.index == raw_input_df.col_from_index).all()
    

Ihr Repository sollte nun wie folgt strukturiert sein:

├── covid_analysis
│  └── transforms.py
├── notebooks
│  ├── covid_eda_modular
│  └── covid_eda_raw (optional)
├── requirements.txt
└── tests
    ├── testdata.csv
    └── transforms_test.py

Schritt 4.3: Ausführen der Tests

Um diese exemplarische Vorgehensweise zu beschleunigen, verwenden Sie in diesem Teilschritt ein importiertes Notebook, um die vorherigen Tests auszuführen. Dieses Notizbuch lädt die abhängigen Python Pakete der Tests in Ihren Arbeitsbereich herunter und installiert sie, führt die Tests aus und meldet die Ergebnisse der Tests. Sie könnten zwar pytest über das Webterminal Ihres Clusters ausführen, das Ausführen von pytest über ein Notizbuch ist jedoch häufig praktischer.

Hinweis

Wenn Sie pytest ausführen, werden alle Dateien, deren Namen der Form test_*.py oder /*_test.py folgen, im aktuellen Verzeichnis und seinen Unterverzeichnissen ausgeführt.

  1. Klicken Sie im Browser Arbeitsbereich mit der rechten Maustaste auf den Notebooks-Ordner, und klicken Sie dann auf Importieren.

  2. Im Dialogfeld " Notizbücher importieren ":

    1. Wählen Sie unter Importieren aus die Option URL aus.

    2. Geben Sie die URL zum rohen Inhalt des Notizbuchs run_unit_tests im Repository databricks/notebook-best-practices in GitHub ein. Diese URL erhalten Sie wie folgt: i. Wechseln Sie zu https://github.com/databricks/notebook-best-practices. ii. Klicken Sie auf den Ordner notebooks. iii. Klicken Sie auf die Datei run_unit_tests.py. Iv. Klicken Sie auf Roh. v. Kopieren Sie die vollständige URL aus der Adressleiste Ihres Webbrowsers in das Dialogfeld " Notizbücher importieren ".

      Hinweis

      Das Dialogfeld Notebooks importieren funktioniert nur mit Git-URLs für öffentliche Repositorys.

    3. Klicken Sie auf Importieren.

  3. Wählen Sie den Cluster aus, an den Sie dieses Notebook anfügen möchten.

  4. Klicken Sie auf Alle ausführen.

  5. Warten Sie, während das Notebook läuft.

Nach Abschluss der Notebook-Ausführung sollten im Notebook Informationen zur Anzahl der bestandenen und nicht bestandenen Tests sowie weitere relevante Details angezeigt werden. Wenn der Cluster beim Starten dieses Notebooks noch nicht aktiv war, kann es mehrere Minuten dauern, bis der Cluster gestartet wurde und Ergebnisse angezeigt werden.

Ihr Repository sollte nun wie folgt strukturiert sein:

├── covid_analysis
│  └── transforms.py
├── notebooks
│  ├── covid_eda_modular
│  ├── covid_eda_raw (optional)
│  └── run_unit_tests
├── requirements.txt
└── tests
    ├── testdata.csv
    └── transforms_test.py
  1. Klicken Sie neben dem Namen des Notizbuchs auf die Schaltfläche first_tests Git-Branch.
  2. Stellen Sie im Dialogfeld best-notebooks auf der Registerkarte Änderungen sicher, dass Folgendes ausgewählt ist:
    • Tests/transforms_test.py
    • notebooks/run_unit_tests.py
    • Tests/testdata.csv
  3. Geben Sie für Commit-Nachricht (erforderlich)Added tests ein.
  4. Geben Sie unter Beschreibung (erforderlich) Folgendes ein: These are the unit tests for the shared code.
  5. Klicken Sie auf Commit & Push.
  6. Klicken Sie im Banner auf den Link für die Pull-Anfrage in Eine Pull-Anfrage bei Ihrem Git-Anbieter erstellen.
  7. Erstellen Sie in GitHub die Pullanforderung, und führen Sie dann die Pullanforderung in der Verzweigung main zusammen.
  8. Gehen Sie zurück in Ihren Azure Databricks-Arbeitsbereich und schließen Sie das Dialogfeld best-notebooks, wenn es weiterhin angezeigt wird.

Schritt 5: Erstellen eines Auftrags zum Ausführen der Notebooks

In den vorherigen Schritten haben Sie den freigegebenen Code manuell getestet und Ihre Notebooks manuell ausgeführt. In diesem Schritt verwenden Sie einen Azure Databricks Auftrag, um Ihren freigegebenen Code zu testen und Ihre Notizbücher automatisch auszuführen, entweder bei Bedarf oder in einem regelmäßigen Zeitplan.

Schritt 5.1: Erstellen einer Auftragsaufgabe zum Ausführen des Testnotebooks

  1. Klicken Sie in Ihrem Arbeitsbereich auf das Symbol Aufträge & Pipelines in der Randleiste.
  2. Klicken Sie auf "Erstellen" und dann auf "Auftrag".
  3. Ändern Sie den Namen des Auftrags in covid_report.
  4. Klicken Sie auf die Kachel " Notizbuch ", um die erste Aufgabe zu konfigurieren. Wenn die Kachel " Notizbuch " nicht verfügbar ist, klicken Sie auf "Weitere Aufgabentyp hinzufügen ", und suchen Sie nach " Notizbuch".
  5. Geben Sie unter Name der Aufgabe den Namen run_notebook_tests ein.
  6. Wählen Sie bei Bedarf im Dropdownmenü "Typ" die Option "Notizbuch" aus.
  7. Wählen Sie für QuelleGit-Anbieter aus.
  8. Klicken Sie auf Git-Verweis hinzufügen.
  9. Gehen Sie im Dialogfeld Git-Informationen wie folgt vor:
    1. Geben Sie für Git-Repository-URL das GitHub Clone mit HTTPS-URL für Ihr GitHub Repository ein. In diesem Artikel wird davon ausgegangen, dass Ihre URL mit best-notebooks.git endet, z. B. https://github.com/<your-GitHub-username>/best-notebooks.git.
    2. Wählen Sie für Git-AnbieterGitHub aus.
    3. Geben Sie unter Git-Verweis (Branch/Tag/Commit) Folgendes ein: main.
    4. Wählen Sie neben Git-Verweis (Branch/Tag/Commit) die Option Branch aus.
    5. Klicken Sie auf Confirm (Bestätigen).
  10. Geben Sie unter Pfad den Pfad notebooks/run_unit_tests ein. Fügen Sie nicht die Dateierweiterung .py hinzu.
  11. Wählen Sie unter Cluster den Cluster aus dem vorherigen Schritt aus.
  12. Klicken Sie auf Aufgabe erstellen.

Hinweis

In diesem Szenario empfiehlt Databricks nicht, die Schaltfläche „Zeitplan“ im Notebook zu verwenden, wie in Erstellen und Verwalten von geplanten Notebookaufträgen beschrieben, um einen Auftrag zur regelmäßigen Ausführung dieses Notebooks zu planen. Der Grund dafür ist, dass über die Zeitplan-Schaltfläche ein Auftrag mit der neuesten Arbeitskopie des Notebooks im Arbeitsbereichs-Repository erstellt wird. Folgen Sie stattdessen den vorangegangenen Anweisungen, um einen Auftrag zu erstellen, der die neueste übergebene Version des Notebooks im Repository verwendet.

Schritt 5.2: Erstellen einer Auftragsaufgabe zum Ausführen des Hauptnotebooks

  1. Klicken Sie auf das Symbol + Aufgabe hinzufügen.
  2. Ein Popupmenü wird angezeigt. Wählen Sie Notebook aus.
  3. Geben Sie unter Name der Aufgabe den Namen run_main_notebook ein.
  4. Wählen Sie unter Typ die Option Notebook aus.
  5. Geben Sie unter Pfad den Pfad notebooks/covid_eda_modular ein. Fügen Sie nicht die Dateierweiterung .py hinzu.
  6. Wählen Sie unter Cluster den Cluster aus dem vorherigen Schritt aus.
  7. Überprüfen Sie, ob der Wert Depends onrun_notebook-tests ist.
  8. Klicken Sie auf Aufgabe erstellen.

Schritt 5.3: Ausführen des Auftrags

  1. Klicken Sie auf Jetzt ausführen.

  2. Klicken Sie im Popup auf Ausführung anzeigen.

    Hinweis

    Sollte das Popup zu schnell ausgeblendet werden, gehen Sie wie folgt vor:

    1. Klicken Sie in der Seitenleiste in der Data Science & Engineering oder Databricks Mosaic KI Umgebung auf Jobs & Pipelines.
    2. Klicken Sie auf der Registerkarte Auftragsausführungen auf den Wert Startzeit für den neuesten Auftrag mit covid_report in der Spalte Aufträge.
  3. Klicken Sie zum Anzeigen der Auftragsergebnisse auf die Kachel run_notebook_tests, die Kachel run_main_notebook oder auf beide. Die Ergebnisse auf den Kacheln entsprechen den Ergebnissen, die Sie erhalten, wenn Sie die Notebooks nacheinander selbst ausführen.

Hinweis

Dieser Job wurde bei Bedarf ausgeführt. Informationen zum Einrichten dieses Auftrags, der regelmäßig ausgeführt werden soll, finden Sie unter Automatisieren von Aufträgen mit Zeitplänen und Triggern.

(Optional) Schritt 6: Das Repo einrichten, um den Code zu testen und das Notebook automatisch auszuführen, sobald sich der Code ändert.

Im vorherigen Schritt haben Sie einen Auftrag verwendet, um Ihren freigegebenen Code automatisch zu testen und Ihre Notebooks einmalig oder regelmäßig auszuführen. Sie können jedoch vorziehen, Tests automatisch auszulösen, wenn Änderungen in Ihrem GitHub Repository zusammengeführt werden, indem Sie ein CI/CD-Tool wie GitHub Actions verwenden.

Schritt 6.1: Einrichten GitHub Zugriffs auf Ihren Arbeitsbereich

In diesem Unterschritt richten Sie einen GitHub Actions Workflow ein, der Aufträge im Arbeitsbereich ausführt, wenn Änderungen in Ihrem Repository zusammengeführt werden. Dazu geben Sie GitHub ein eindeutiges Azure Databricks Token für den Zugriff.

Aus Sicherheitsgründen wird von Databricks davon abgeraten, ihrem Azure Databricks Arbeitsbereichsbenutzer das persönliche Zugriffstoken für GitHub zu gewähren. Stattdessen empfiehlt Databricks, GitHub ein Microsoft Entra ID-Token zu übergeben, das einem Dienstprinzipal von Microsoft Entra ID zugeordnet ist. Anweisungen finden Sie im Azure-Abschnitt der Run Databricks Notebook GitHub Action-Seite im GitHub Actions Marketplace.

Wichtig

Notebooks werden mit allen Arbeitsbereichsberechtigungen der Identität ausgeführt, die dem Token zugeordnet ist. Daher empfiehlt Databricks die Verwendung eines Service Principals. Wenn Sie Ihrem Azure Databricks-Arbeitsbereichsbenutzer tatsächlich ein persönliches Zugriffstoken für GitHub ausschließlich zu persönlichen Erkundungszwecken geben möchten und Sie verstehen, dass Databricks aus Sicherheitsgründen von dieser Praxis abrät, lesen Sie die Anweisungen zum Erstellen eines persönlichen Zugriffstokens für den Arbeitsbereichsbenutzer.

Schritt 6.2: Hinzufügen des GitHub Actions-Workflows

In diesem Unterschritt fügen Sie einen GitHub Actions Workflow hinzu, um das run_unit_tests Notizbuch auszuführen, wenn eine Pullanforderung an das Repository vorhanden ist.

In diesem Unterschritt wird der GitHub Actions Workflow in einer Datei gespeichert, die in mehreren Ordnerebenen in Ihrem GitHub-Repository gespeichert ist. GitHub Actions erfordert, dass eine bestimmte geschachtelte Ordnerhierarchie in Ihrem Repository vorhanden ist, um ordnungsgemäß zu funktionieren. Um diesen Schritt abzuschließen, müssen Sie die Website für Ihr GitHub Repository verwenden, da die benutzeroberfläche des Azure Databricks Git-Ordners das Erstellen geschachtelter Ordnerhierarchien nicht unterstützt.

  1. Klicken Sie auf der Website für Ihr GitHub Repository auf die Registerkarte Code.

  2. Klicken Sie auf den Pfeil neben main, um die Dropdownliste Branches oder Tags wechseln zu erweitern.

  3. Geben Sie im Feld Branch suchen oder erstellen Folgendes ein: adding_github_actions.

  4. Klicken Sie auf "Branch erstellen: adding_github_actions von 'main'".

  5. Klicken Sie auf Datei hinzufügen > Neue Datei erstellen.

  6. Geben Sie unter Datei benennen den Namen .github/workflows/databricks_pull_request_tests.yml ein.

  7. Geben Sie im Editorfenster den folgenden Code ein: Dieser Code verwendet den pull_request-Hook aus dem Run Databricks Notebook GitHub Action, um das run_unit_tests Notebook auszuführen.

    Ersetzen Sie im folgenden Code:

    • <your-workspace-instance-URL> mit Ihrem Azure Databricks-Instanznamen.
    • <your-access-token> durch das Token, das Sie weiter oben generiert haben.
    • <your-cluster-id> mit Ihrer klassischen Ziel-Rechen-ID.
    name: Run pre-merge Databricks tests
    
    on:
      pull_request:
    
    env:
      # Replace this value with your workspace instance name.
      DATABRICKS_HOST: https://<your-workspace-instance-name>
    
    jobs:
      unit-test-notebook:
        runs-on: ubuntu-latest
        timeout-minutes: 15
    
        steps:
          - name: Checkout repo
            uses: actions/checkout@v2
          - name: Run test notebook
            uses: databricks/run-notebook@main
            with:
              databricks-token: <your-access-token>
    
              local-notebook-path: notebooks/run_unit_tests.py
    
              existing-cluster-id: <your-cluster-id>
    
              git-commit: '${{ github.event.pull_request.head.sha }}'
    
              # Grant all users view permission on the notebook's results, so that they can
              # see the result of the notebook, if they have related access permissions.
              access-control-list-json: >
                [
                  {
                    "group_name": "users",
                    "permission_level": "CAN_VIEW"
                  }
                ]
              run-name: 'EDA transforms helper module unit tests'
    
  8. Klicke auf Änderungen übernehmen.

  9. Geben Sie im Dialogfeld Commit changesCreate databricks_pull_request_tests.yml in das Feld Commitnachricht ein.

  10. Wählen Sie Direkten Commit zum Branch adding_github_actions ausführen, und klicken Sie auf Änderungen committen.

  11. Klicken Sie auf der Registerkarte Code auf Vergleich und Pull Request, und erstellen Sie dann den Pull Request.

  12. Auf der Pull-Request-Seite warten Sie, bis das Symbol neben Databricks-Tests vor dem Zusammenführen ausführen/unit-test-notebook (pull_request) ein grünes Häkchen anzeigt. (Es kann etwas dauern, bis das Symbol angezeigt wird.) Wird anstelle eines grünen Häkchens ein rotes X angezeigt, klicken Sie auf Details, um den Grund dafür zu ermitteln. Wenn das Symbol nicht mehr angezeigt wird bzw. die Details nicht mehr angezeigt werden, klicken Sie auf Alle Prüfungen anzeigen.

  13. Wenn das grüne Häkchen angezeigt wird, führen Sie den Pull Request in den main-Branch zusammen.

(Optional) Schritt 7: Aktualisieren des freigegebenen Codes in GitHub zum Auslösen von Tests

In diesem Schritt nehmen Sie eine Änderung am freigegebenen Code vor und übertragen dann die Änderung in Ihr GitHub Repository, das die Tests automatisch auslöst, basierend auf dem GitHub Aktion aus dem vorherigen Schritt.

Schritt 7.1: Erstellen eines weiteren Arbeitsbranchs im Repository

  1. Öffnen Sie im Arbeitsbereich-Browser den Git-Ordner best-notebooks.
  2. Klicken Sie neben dem Namen des Ordners auf die Git-Branch-Schaltfläche first_tests.
  3. Klicken Sie im Dialogfeld best-notebooks neben dem Branch first_tests auf den Dropdownpfeil, und wählen Sie main aus.
  4. Klicken Sie auf die Schaltfläche Ziehen. Wenn Sie aufgefordert werden, mit dem Pullen fortzufahren, klicken Sie auf Bestätigen.
  5. Klicken Sie auf die Schaltfläche + (Branch erstellen).
  6. Geben Sie trigger_tests ein, und klicken Sie anschließend auf Erstellen. (Sie können Ihrem Branch auch einen anderen Namen geben.)
  7. Schließen Sie dieses Dialogfeld.

Schritt 7.2: Ändern des freigegebenen Codes

  1. Klicken Sie im Arbeitsbereich-Browser im Git-Ordner best-notebooks auf die Datei covid_analysis/transforms.py.

  2. Ändern Sie die dritte Zeile dieser Datei:

    # Filter by country code.
    

    Folgendermaßen:

    # Filter by country code. If not specified, use "USA."
    

Schritt 7.3: Einchecken der Änderung, um die Tests auszulösen

  1. Klicken Sie neben dem Dateinamen auf die Git-Verzweigungsschaltfläche trigger_tests.
  2. Stellen Sie im Dialogfeld best-notebooks auf der Registerkarte Änderungen sicher, dass covid_analysis/transforms.py ausgewählt ist.
  3. Geben Sie für Commit-Nachricht (erforderlich)Updated comment ein.
  4. Geben Sie unter Beschreibung (erforderlich) Folgendes ein: This updates the comment for filter_country.
  5. Klicken Sie auf Commit & Push.
  6. Klicken Sie im Banner auf Einen Pull-Request bei Ihrem Git-Anbieter erstellen und erstellen Sie dann den Pull-Request in GitHub.
  7. Auf der Pull-Request-Seite warten Sie, bis das Symbol neben Databricks-Tests vor dem Zusammenführen ausführen/unit-test-notebook (pull_request) ein grünes Häkchen anzeigt. (Es kann etwas dauern, bis das Symbol angezeigt wird.) Wird anstelle eines grünen Häkchens ein rotes X angezeigt, klicken Sie auf Details, um den Grund dafür zu ermitteln. Wenn das Symbol nicht mehr angezeigt wird bzw. die Details nicht mehr angezeigt werden, klicken Sie auf Alle Prüfungen anzeigen.
  8. Wenn das grüne Häkchen angezeigt wird, führen Sie den Pull Request in den main-Branch zusammen.