Show Menu
THEMEN×

Migrationshandbücher für Rezept und Notebooks

Notebooks und Rezepte mit Python/R bleiben davon unberührt. Die Migration gilt nur für bestehende PySpark/Spark Rezepte und Notebooks.
In den folgenden Handbüchern werden die Schritte und Informationen erläutert, die für die Migration vorhandener Rezepte und Notebooks erforderlich sind.

Spark-Migrationshandbuch

Das Skript-Artefakt, das durch die Buildschritte generiert wird, ist jetzt ein Docker-Bild, das Ihre JAR-Binärdatei enthält. Darüber hinaus hat sich die Syntax zum Lesen und Schreiben von Datensätzen mit dem Plattform-SDK geändert und erfordert die Änderung des Rezeptcodes.
Das folgende Video soll Ihnen helfen, die für Spark-Rezepte erforderlichen Änderungen besser zu verstehen:

Datensätze lesen und schreiben (Spark)

Bevor Sie das Docker-Bild erstellen, überprüfen Sie die Beispiele zum Lesen und Schreiben von Datensätzen im Plattform-SDK, die in den folgenden Abschnitten aufgeführt sind. Wenn Sie vorhandene Rezepte konvertieren, muss Ihr Plattform-SDK-Code aktualisiert werden.

Datensatz lesen

In diesem Abschnitt werden die zum Lesen eines Datensatzes erforderlichen Änderungen beschrieben und das von Adobe bereitgestellte Beispiel helper.scala verwendet.
Alte Methode zum Lesen eines Datensatzes
 var df = sparkSession.read.format("com.adobe.platform.dataset")
    .option(DataSetOptions.orgId, orgId)
    .option(DataSetOptions.serviceToken, serviceToken)
    .option(DataSetOptions.userToken, userToken)
    .option(DataSetOptions.serviceApiKey, apiKey)
    .load(dataSetId)

Neue Methode zum Lesen eines Datensatzes
Mit den Aktualisierungen der Spark-Rezepte müssen eine Reihe von Werten hinzugefügt und geändert werden. Erstens DataSetOptions wird sie nicht mehr verwendet. Replace DataSetOptions with QSOption . Darüber hinaus sind neue option Parameter erforderlich. Es sind sowohl QSOption.mode als auch QSOption.datasetId nötig. Schließlich orgId und serviceApiKey müssen geändert werden in imsOrg und apiKey . Im folgenden Beispiel finden Sie einen Vergleich zum Lesen von Datensätzen:
import com.adobe.platform.query.QSOption
var df = sparkSession.read.format("com.adobe.platform.query")
  .option(QSOption.userToken", {userToken})
  .option(QSOption.serviceToken, {serviceToken})
  .option(QSOption.imsOrg, {orgId})
  .option(QSOption.apiKey, {apiKey})
  .option(QSOption.mode, "interactive")
  .option(QSOption.datasetId, {dataSetId})
  .load()

Im interaktiven Modus wird eine Zeitüberschreitung angezeigt, wenn die Abfragen länger als 10 Minuten laufen. Wenn Sie mehr als ein paar Gigabyte Daten eingeben, wird empfohlen, zum Stapelmodus zu wechseln. Der Stapelmodus dauert zwar länger, kann aber größere Datensätze verarbeiten.

Schreiben in einen Datensatz

In diesem Abschnitt werden die zum Schreiben eines Datensatzes erforderlichen Änderungen mithilfe des von Adobe bereitgestellten Beispiels ScoringDataSaver.scala beschrieben.
Alte Art, einen Datensatz zu schreiben
df.write.format("com.adobe.platform.dataset")
    .option(DataSetOptions.orgId, orgId)
    .option(DataSetOptions.serviceToken, serviceToken)
    .option(DataSetOptions.userToken, userToken)
    .option(DataSetOptions.serviceApiKey, apiKey)
    .save(scoringResultsDataSetId)

Neue Methode zum Schreiben eines Datensatzes
Mit den Aktualisierungen der Spark-Rezepte müssen eine Reihe von Werten hinzugefügt und geändert werden. Erstens DataSetOptions wird sie nicht mehr verwendet. Replace DataSetOptions with QSOption . Darüber hinaus sind neue option Parameter erforderlich. QSOption.datasetId benötigt und ersetzt die Notwendigkeit, die {dataSetId} Eingabe zu laden .save() . Schließlich orgId und serviceApiKey müssen geändert werden in imsOrg und apiKey . Im folgenden Beispiel finden Sie einen Vergleich zum Schreiben von Datensätzen:
import com.adobe.platform.query.QSOption
df.write.format("com.adobe.platform.query")
  .option(QSOption.userToken", {userToken})
  .option(QSOption.serviceToken, {serviceToken})
  .option(QSOption.imsOrg, {orgId})
  .option(QSOption.apiKey, {apiKey})
  .option(QSOption.datasetId, {dataSetId})
  .save()

Paketdockerbasierte Quelldateien (Spark)

Beginn, indem Sie zu dem Ordner navigieren, in dem sich Ihr Rezept befindet.
Die folgenden Abschnitte verwenden das neue Scala Retail Sales-Rezept, das im öffentlichen Github-Repository von Data Science Workspace gefunden werden kann .

Beispielrezept herunterladen (Spark)

Das Beispielrezept enthält Dateien, die in Ihr bestehendes Rezept kopiert werden müssen. Um den öffentlichen Github zu klonen, der alle Beispielrezepte enthält, geben Sie Folgendes in Terminal ein:
git clone https://github.com/adobe/experience-platform-dsw-reference.git

Das Scala-Rezept befindet sich im folgenden Verzeichnis experience-platform-dsw-reference/recipes/scala/retail .

Hinzufügen der Dockerfile (Spark)

Eine neue Datei wird im Skriptordner benötigt, um den dockerbasierten Workflow verwenden zu können. Kopieren Sie die Dockerdatei aus dem Ordner recipes unter experience-platform-dsw-reference/recipes/scala/Dockerfile . Optional können Sie auch den unten stehenden Code kopieren und in eine neue Datei namens Dockerfile .
Die Beispieldatei JAR, die unten gezeigt wird, ml-retail-sample-spark-*-jar-with-dependencies.jar sollte durch den Namen der JAR-Datei Ihres Rezepts ersetzt werden.
FROM adobe/acp-dsw-ml-runtime-spark:0.0.1

COPY target/ml-retail-sample-spark-*-jar-with-dependencies.jar /application.jar

Abhängigkeiten ändern (Spark)

Wenn Sie ein vorhandenes Rezept verwenden, sind Änderungen in der Datei "pom.xml"für Abhängigkeiten erforderlich. Ändern Sie die Abhängigkeitsversion model-authoring-sdk in 2.0.0. Aktualisieren Sie dann die Spark-Version in der Pom-Datei auf 2.4.3 und die Scala-Version auf 2.11.12.
<groupId>com.adobe.platform.ml</groupId>
<artifactId>authoring-sdk_2.11</artifactId>
<version>2.0.0</version>
<classifier>jar-with-dependencies</classifier>

Vorbereiten der Docker-Skripten (Spark)

Spark-Rezepte verwenden keine binären Artefakte mehr und erfordern stattdessen das Erstellen eines Dockerbilds. Wenn Sie dies noch nicht getan haben, laden Sie Docker herunter und installieren Sie Docker .
In dem bereitgestellten Scala-Beispielrezept finden Sie die Skripte login.sh und build.sh befinden sich unter experience-platform-dsw-reference/recipes/scala/ . Kopieren Sie diese Dateien und fügen Sie sie in Ihr bestehendes Rezept ein.
Die Ordnerstruktur sollte nun dem folgenden Beispiel ähneln (neu hinzugefügte Dateien werden hervorgehoben):
Der nächste Schritt besteht darin, die Quelldateien des Pakets in ein Rezept -Tutorial zu übernehmen. Dieses Lernprogramm enthält einen Abschnitt, in dem das Erstellen eines Dockerbilds für ein Scala-(Spark-)Rezept skizziert wird. Nach Abschluss des Vorgangs erhalten Sie das Docker-Container in einer Azurblauer Bildregistrierung zusammen mit der entsprechenden Bild-URL.

Erstellen eines Rezepts (Spark)

Um ein Rezept zu erstellen, müssen Sie zunächst das Tutorial zu Quelldateien für das Paket abschließen und die URL Ihres Dockerbilds bereitstellen. Sie können ein Rezept mit der Benutzeroberfläche oder der API erstellen.
Um Ihr Rezept mithilfe der Benutzeroberfläche zu erstellen, folgen Sie dem Lernprogramm zum Importieren eines zusammengestellten Skripts (UI) für Scala.
Um Ihr Rezept mit der API zu erstellen, folgen Sie dem Lernprogramm zum Importieren eines zusammengestellten Skripts (API) für Scala.

Migrationshandbuch für PySpark

Das Rezept-Artefakt, das durch die Build-Schritte generiert wird, ist jetzt ein Docker-Bild, das Ihre binäre Datei ".egg"enthält. Darüber hinaus hat sich die Syntax zum Lesen und Schreiben von Datensätzen mit dem Plattform-SDK geändert und erfordert die Änderung des Rezeptcodes.
Das folgende Video soll Ihnen helfen, die für PySpark-Rezepte erforderlichen Änderungen besser zu verstehen:

Datensätze lesen und schreiben (PySpark)

Bevor Sie das Docker-Bild erstellen, überprüfen Sie die Beispiele zum Lesen und Schreiben von Datensätzen im Plattform-SDK, die in den folgenden Abschnitten aufgeführt sind. Wenn Sie vorhandene Rezepte konvertieren, muss Ihr Plattform-SDK-Code aktualisiert werden.

Datensatz lesen

In diesem Abschnitt werden die zum Lesen eines Datensatzes erforderlichen Änderungen mithilfe des von Adobe bereitgestellten Beispiels helper.py beschrieben.
Alte Methode zum Lesen eines Datensatzes
dataset_options = get_dataset_options(spark.sparkContext)
pd = spark.read.format("com.adobe.platform.dataset") 
  .option(dataset_options.serviceToken(), service_token) 
  .option(dataset_options.userToken(), user_token) 
  .option(dataset_options.orgId(), org_id) 
  .option(dataset_options.serviceApiKey(), api_key)
  .load(dataset_id)

Neue Methode zum Lesen eines Datensatzes
Mit den Aktualisierungen der Spark-Rezepte müssen eine Reihe von Werten hinzugefügt und geändert werden. Erstens DataSetOptions wird sie nicht mehr verwendet. Replace DataSetOptions with qs_option . Darüber hinaus sind neue option Parameter erforderlich. Es sind sowohl qs_option.mode als auch qs_option.datasetId nötig. Schließlich orgId und serviceApiKey müssen geändert werden in imsOrg und apiKey . Im folgenden Beispiel finden Sie einen Vergleich zum Lesen von Datensätzen:
qs_option = spark_context._jvm.com.adobe.platform.query.QSOption
pd = sparkSession.read.format("com.adobe.platform.query") 
  .option(qs_option.userToken, {userToken}) 
  .option(qs_option.serviceToken, {serviceToken}) 
  .option(qs_option.imsOrg, {orgId}) 
  .option(qs_option.apiKey, {apiKey}) 
  .option(qs_option.mode, "interactive") 
  .option(qs_option.datasetId, {dataSetId}) 
  .load()

Im interaktiven Modus wird eine Zeitüberschreitung angezeigt, wenn die Abfragen länger als 10 Minuten laufen. Wenn Sie mehr als ein paar Gigabyte Daten eingeben, wird empfohlen, zum Stapelmodus zu wechseln. Der Stapelmodus dauert zwar länger, kann aber größere Datensätze verarbeiten.

Schreiben in einen Datensatz

In diesem Abschnitt werden die zum Schreiben eines Datensatzes erforderlichen Änderungen mithilfe des von Adobe bereitgestellten Beispiels data_save.py beschrieben.
Alte Art, einen Datensatz zu schreiben
df.write.format("com.adobe.platform.dataset")
  .option(DataSetOptions.orgId, orgId)
  .option(DataSetOptions.serviceToken, serviceToken)
  .option(DataSetOptions.userToken, userToken)
  .option(DataSetOptions.serviceApiKey, apiKey)
  .save(scoringResultsDataSetId)

Neue Methode zum Schreiben eines Datensatzes
Mit den Aktualisierungen der PySpark-Rezepte müssen eine Reihe von Werten hinzugefügt und geändert werden. Erstens DataSetOptions wird sie nicht mehr verwendet. Replace DataSetOptions with qs_option . Darüber hinaus sind neue option Parameter erforderlich. qs_option.datasetId ist erforderlich und ersetzt die Notwendigkeit, das {dataSetId} in zu laden .save() . Schließlich orgId und serviceApiKey müssen geändert werden in imsOrg und apiKey . Im folgenden Beispiel finden Sie einen Vergleich zum Lesen von Datensätzen:
qs_option = spark_context._jvm.com.adobe.platform.query.QSOption
scored_df.write.format("com.adobe.platform.query") 
  .option(qs_option.userToken, {userToken}) 
  .option(qs_option.serviceToken, {serviceToken}) 
  .option(qs_option.imsOrg, {orgId}) 
  .option(qs_option.apiKey, {apiKey}) 
  .option(qs_option.datasetId, {dataSetId}) 
  .save()

Verpacken von Docker-basierten Quelldateien (PySpark)

Beginn, indem Sie zu dem Ordner navigieren, in dem sich Ihr Rezept befindet.
In diesem Beispiel wird das neue PySpark Retail Sales-Rezept verwendet und befindet sich im öffentlichen Github-Repository von Data Science Workspace .

Beispielrezept herunterladen (PySpark)

Das Beispielrezept enthält Dateien, die in Ihr bestehendes Rezept kopiert werden müssen. Um den öffentlichen Github zu klonen, der alle Beispielrezepte enthält, geben Sie Folgendes in Terminal ein.
git clone https://github.com/adobe/experience-platform-dsw-reference.git

Das PySpark-Rezept befindet sich im folgenden Verzeichnis experience-platform-dsw-reference/recipes/pyspark .

Hinzufügen der Dockerfile (PySpark)

Eine neue Datei wird im Skriptordner benötigt, um den dockerbasierten Workflow verwenden zu können. Kopieren Sie die Dockerdatei aus dem Ordner recipes unter experience-platform-dsw-reference/recipes/pyspark/Dockerfile . Optional können Sie auch den unten stehenden Code kopieren und einfügen und eine neue Datei namens Dockerfile .
Die Beispieldatei für das Ei pysparkretailapp-*.egg sollte durch den Namen der Eizelldatei ersetzt werden.
FROM adobe/acp-dsw-ml-runtime-pyspark:0.0.1
RUN mkdir /recipe

COPY . /recipe

RUN cd /recipe && \
    ${PYTHON} setup.py clean install && \
    rm -rf /recipe

RUN cp /databricks/conda/envs/${DEFAULT_DATABRICKS_ROOT_CONDA_ENV}/lib/python3.6/site-packages/pysparkretailapp-*.egg /application.egg

Bereiten Sie Ihre Docker-Skripten vor (PySpark)

PySpark-Rezepte verwenden keine binären Artefakte mehr und müssen stattdessen ein Docker-Bild erstellen. Falls nicht, laden Sie Docker herunter und installieren Sie es.
In dem bereitgestellten PySpark-Beispielrezept finden Sie die Skripte login.sh und build.sh finden Sie unter experience-platform-dsw-reference/recipes/pyspark . Kopieren Sie diese Dateien und fügen Sie sie in Ihr bestehendes Rezept ein.
Die Ordnerstruktur sollte nun dem folgenden Beispiel ähneln (neu hinzugefügte Dateien werden hervorgehoben):
Ihr Rezept kann jetzt mit einem Docker-Bild erstellt werden. Der nächste Schritt besteht darin, die Quelldateien des Pakets in ein Rezept -Tutorial zu übernehmen. Dieses Lernprogramm enthält einen Abschnitt, in dem das Erstellen eines Dockerbilds für ein PySpark-Rezept (Spark 2.4) umrissen wird. Nach Abschluss des Vorgangs erhalten Sie das Docker-Container in einer Azurblauer Bildregistrierung zusammen mit der entsprechenden Bild-URL.

Erstellen eines Rezepts (PySpark)

Um ein Rezept zu erstellen, müssen Sie zunächst das Tutorial zu Quelldateien für das Paket abschließen und die URL Ihres Dockerbilds bereitstellen. Sie können ein Rezept mit der Benutzeroberfläche oder der API erstellen.
Um Ihr Rezept mithilfe der Benutzeroberfläche zu erstellen, folgen Sie dem Lernprogramm zum Importieren eines zusammengestellten Skripts (UI) für PySpark.
Um Ihr Rezept mit der API zu erstellen, folgen Sie dem Importieren eines zusammengestellten Skript-(API) -Lernprogramms für PySpark.

Migrationshandbücher für Notebooks

Jüngste Änderungen an JupyterLab-Notebooks erfordern, dass Sie Ihre bestehenden PySpark- und Spark 2.3-Notebooks auf 2.4 aktualisieren. Mit dieser Änderung wurde JupyterLab Launcher um neue Starter-Notebooks erweitert. Eine schrittweise Anleitung zum Konvertieren von Notebooks finden Sie in den folgenden Handbüchern:
Das folgende Video hilft Ihnen dabei, die für JupyterLab-Notebooks erforderlichen Änderungen besser zu verstehen:

Migrationshandbuch für PySpark 2.3 bis 2.4

Mit der Einführung von PySpark 2.4 auf JupyterLab Notebooks verwenden neue Python Notebooks mit PySpark 2.4 jetzt den Python 3 Kernel anstelle des PySpark 3 Kernels. Dies bedeutet, dass vorhandener Code, der auf PySpark 2.3 ausgeführt wird, in PySpark 2.4 nicht unterstützt wird.
PySpark 2.3 ist veraltet und soll in einer folgenden Version entfernt werden. Alle vorhandenen Beispiele werden durch PySpark 2.4-Beispiele ersetzt.
Gehen Sie wie folgt vor, um Ihre vorhandenen PySpark 3-Notebooks (Spark 2.3) in Spark 2.4 zu konvertieren:

Kernel

PySpark 3 (Spark 2.4) Notebooks verwenden den Python 3 Kernel anstelle des veralteten PySpark Kernels, der in PySpark 3 (Spark 2.3 - nicht mehr unterstützt) Notebooks verwendet wird.
Um den Kernel in der JupyterLab-Benutzeroberfläche zu bestätigen oder zu ändern, wählen Sie die Kernelschaltfläche in der oberen rechten Navigationsleiste Ihres Notebooks. Wenn Sie ein vordefiniertes Starter-Notebook verwenden, ist der Kernel vorausgewählt. Im folgenden Beispiel wird der PySpark 3 (Spark 2.4) Aggregation Notebook-Starter verwendet.
Wenn Sie das Dropdown-Menü auswählen, wird eine Liste der verfügbaren Kernel geöffnet.
Für PySpark 3 (Spark 2.4) Notebooks, wählen Sie den Python 3 Kernel und bestätigen Sie durch Klicken auf die Schaltfläche Auswählen .

Initialisieren von sparkSession

Alle Spark 2.4 Notebooks erfordern, dass Sie die Sitzung mit dem neuen Textbausteincode initialisieren.
Notebook PySpark 3 (Spark 2.3 - nicht mehr unterstützt) PySpark 3 (Spark 2.4)
Kernel PySpark 3 Python 3
Code
  spark


von pyspark.sql import SparkSessionspark = SparkSession.builder.getOrCreate()


Die folgenden Abbildungen zeigen die Unterschiede in der Konfiguration von PySpark 2.3 und PySpark 2.4. In diesem Beispiel werden die in JupyterLab Launcher bereitgestellten Aggregation -Starterchipsätze verwendet.
Konfigurationsbeispiel für 2.3 (nicht mehr unterstützt)
Konfigurationsbeispiel für 2.4

Verwenden von %dataset magic

Mit der Einführung von Spark 2.4 wird %dataset benutzerdefinierte Magie für den Einsatz in neuen PySpark 3 (Spark 2.4) Notebooks (Python 3 Kernel) geliefert.
Nutzung
%dataset {action} --datasetId {id} --dataFrame {df}
Beschreibung
Ein benutzerdefinierter Data Science Workspace magischer Befehl zum Lesen oder Schreiben eines Datensatzes von einem Python-Notebook (Python 3-Kernel).
  • : Der Aktionstyp, der für den Datensatz ausgeführt werden soll. Es stehen zwei Aktionen zur Verfügung: "Lesen"oder "Schreiben".
  • —datasetId : Dient zum Bereitstellen der ID des zu lesenden oder zu schreibenden Datensatzes. Dies ist ein erforderliches Argument.
  • —dataFrame : Das Pandas-Datenblatt. Dies ist ein erforderliches Argument.
    • Wenn die Aktion "gelesen"ist, ist die Variable, in der Ergebnisse des Datensatzlesevorgangs verfügbar sind.
    • Wenn die Aktion "schreiben"lautet, wird dieser Datenraum in den Datensatz geschrieben.
  • —mode (optional) : Zulässige Parameter sind "batch"und "interaktiv". Standardmäßig ist der Modus auf "interaktiv"eingestellt. Es wird empfohlen, beim Lesen großer Datenmengen den Stapelmodus zu verwenden.
Beispiele
  • Beispiel lesen: %dataset read --datasetId 5e68141134492718af974841 --dataFrame pd0
  • Beispiel schreiben: %dataset write --datasetId 5e68141134492718af974842 --dataFrame pd0

In ein Datenformat in LocalContext laden

Mit der Einführung von Spark 2.4 wird %dataset maßgeschneiderte Magie geliefert. Im folgenden Beispiel werden die wichtigsten Unterschiede beim Laden von Datenblättern in PySpark- (Spark 2.3) und PySpark- (Spark 2.4)-Notebooks hervorgehoben:
Verwenden von PySpark 3 (Spark 2.3 - nicht mehr unterstützt) - PySpark 3 Kernel
dataset_options = sc._jvm.com.adobe.platform.dataset.DataSetOptions
pd0 = spark.read.format("com.adobe.platform.dataset")
  .option(dataset_options.orgId(), "310C6D375BA5248F0A494212@AdobeOrg")
  .load("5e68141134492718af974844")

Verwenden von PySpark 3 (Spark 2.4) - Python 3 Kernel
%dataset read --datasetId 5e68141134492718af974844 --dataFrame pd0

Element
Beschreibung
pd0
Name des zu verwendenden oder zu erstellenden Pandas-Dataframe-Objekts.
Benutzerdefinierte Magie für Datenzugriff im Python3 Kernel.
Die folgenden Abbildungen zeigen die wichtigsten Unterschiede beim Laden von Daten für PySpark 2.3 und PySpark 2.4. In diesem Beispiel werden die in JupyterLab Launcher bereitgestellten Aggregation -Starterchipsätze verwendet.
Laden von Daten in PySpark 2.3 (Luma-Datensatz) - veraltet
Laden von Daten in PySpark 2.4 (Luma-Datensatz)
Mit PySpark 3 (Spark 2.4) sc = spark.sparkContext ist beim Laden definiert.
Laden von Experience Cloud-Plattformdaten in PySpark 2.3 - nicht mehr unterstützt
Laden von Experience Cloud-Plattformdaten in PySpark 2.4
Mit PySpark 3 (Spark 2.4) müssen die org_id und dataset_id nicht mehr definiert werden. Außerdem df = spark.read.format wurde eine benutzerdefinierte Magie ersetzt, %dataset um das Lesen und Schreiben von Datensätzen zu vereinfachen.
Element
Beschreibung
Benutzerdefinierte Magie für Datenzugriff im Python3 Kernel.
—mode kann auf interactive oder batch eingestellt werden. Die Standardeinstellung für —mode ist interactive . Es wird empfohlen, beim Lesen großer Datenmengen den batch Modus zu verwenden.

Erstellen eines lokalen Datenspeichers

Mit PySpark 3 (Spark 2.4) wird %% sparkmagic nicht mehr unterstützt. Die folgenden Vorgänge können nicht mehr verwendet werden:
  • %%help
  • %%info
  • %%cleanup
  • %%delete
  • %%configure
  • %%local
In der folgenden Tabelle sind die Änderungen aufgeführt, die zum Konvertieren %%sql sparkmagischer Abfragen erforderlich sind:
Notebook PySpark 3 (Spark 2.3 - nicht mehr unterstützt) PySpark 3 (Spark 2.4)
Kernel PySpark 3 Python 3
Code
%%sql -o dfselect * from sparkdf


 %%sql -o df -n limitselect * from sparkdf


%%sql -o df -qselect * from sparkdf


 %%sql -o df -r fractionselect * from sparkdf


df = spark.sql(''' SELECT * From sparkdf''')


df = spark.sql(''' SELECT * From sparkdf LIMIT limit''')


df = spark.sql(''' SELECT * From sparkdf LIMIT limit''')


sample_df = df.sample(fraction)


Sie können auch ein optionales Seed-Beispiel angeben, z. B. einen booleschen withReplacement, einen Dublette-Anteil oder einen langen Samen.
Die folgenden Abbildungen verdeutlichen die wichtigsten Unterschiede bei der Erstellung eines lokalen Dataframs in PySpark 2.3 und PySpark 2.4. In diesem Beispiel werden die in JupyterLab Launcher bereitgestellten Aggregation -Starterchipsätze verwendet.
Lokale Datendatei erstellen PySpark 2.3 - nicht mehr unterstützt
Lokale Datenspeicherung PySpark 2.4 erstellen
Mit PySpark 3 (Spark 2.4) wird %%sql Sparkmagic nicht mehr unterstützt und wurde durch Folgendes ersetzt:

Schreiben in einen Datensatz

Mit der Einführung von Spark 2.4 wird %dataset maßgeschneiderte Magie geliefert, die das Schreiben von Datensätzen sauberer macht. Verwenden Sie zum Schreiben in einen Datensatz das folgende Spark 2.4-Beispiel:
Verwenden von PySpark 3 (Spark 2.3 - nicht mehr unterstützt) - PySpark 3 Kernel
userToken = spark.sparkContext.getConf().get("spark.yarn.appMasterEnv.USER_TOKEN")
serviceToken = spark.sparkContext.getConf().get("spark.yarn.appMasterEnv.SERVICE_TOKEN")
serviceApiKey = spark.sparkContext.getConf().get("spark.yarn.appMasterEnv.SERVICE_API_KEY")

dataset_options = sc._jvm.com.adobe.platform.dataset.DataSetOptions

pd0.write.format("com.adobe.platform.dataset")
  .option(dataset_options.orgId(), "310C6D375BA5248F0A494212@AdobeOrg")
  .option(dataset_options.userToken(), userToken)
  .option(dataset_options.serviceToken(), serviceToken)
  .option(dataset_options.serviceApiKey(), serviceApiKey)
  .save("5e68141134492718af974844")

Verwenden von PySpark 3 (Spark 2.4) - Python 3 Kernel
%dataset write --datasetId 5e68141134492718af974844 --dataFrame pd0
pd0.describe()
pd0.show(10, False)

Element
Beschreibung
pd0
Name des zu verwendenden oder zu erstellenden Pandas-Dataframe-Objekts.
Benutzerdefinierte Magie für Datenzugriff im Python3 Kernel.
—mode kann auf interactive oder batch eingestellt werden. Die Standardeinstellung für —mode ist interactive . Es wird empfohlen, beim Lesen großer Datenmengen den batch Modus zu verwenden.
Die folgenden Abbildungen verdeutlichen die wichtigsten Unterschiede beim Zurückschreiben von Daten an Platform in PySpark 2.3 und PySpark 2.4. In diesem Beispiel werden die in JupyterLab Launcher bereitgestellten Aggregation -Starterchipsätze verwendet.
Daten zurück in Platform PySpark 2.3 schreiben - veraltet
Daten zurück in Platform PySpark 2.4 schreiben
Mit PySpark 3 (Spark 2.4) entfällt die Notwendigkeit, Werte wie %dataset , userToken , serviceToken und serviceApiKey``.option zu definieren. Darüber hinaus müssen keine orgId Definitionen mehr definiert werden.

Migrationshandbuch für Spark 2.3 bis Spark 2.4 (Scala)

Mit der Einführung von Spark 2.4 auf JupyterLab Notebooks verwenden bestehende Spark-Notebooks (Spark 2.3) jetzt den Scala-Kernel anstelle des Spark-Kernels. Das bedeutet, dass vorhandener Code, der auf Spark (Spark 2.3) ausgeführt wird, in Scala (Spark 2.4) nicht unterstützt wird. Außerdem sollten alle neuen Spark-Notebooks Scala (Spark 2.4) im JupyterLab-Launcher verwenden.
Spark (Spark 2.3) ist veraltet und soll in einer folgenden Version entfernt werden. Alle vorhandenen Beispiele werden durch Scala-Beispiele (Spark 2.4) ersetzt.
Gehen Sie wie folgt vor, um Ihre vorhandenen Spark-Notebooks (Spark 2.3) in Scala (Spark 2.4) zu konvertieren:

Kernel

Scala (Spark 2.4) Notebooks verwenden den Scala Kernel anstelle des veralteten Spark Kernels, der in Spark (Spark 2.3 - nicht mehr unterstützt) Notebooks verwendet wird.
Um den Kernel in der JupyterLab-Benutzeroberfläche zu bestätigen oder zu ändern, wählen Sie die Kernelschaltfläche in der oberen rechten Navigationsleiste Ihres Notebooks. Das Popup Kernel auswählen wird angezeigt. Wenn Sie eines der vordefinierten Starter-Notebooks verwenden, ist der Kernel vorausgewählt. Im folgenden Beispiel wird das Scala Clustering -Notebook in JupyterLab Launcher verwendet.
Wenn Sie das Dropdown-Menü auswählen, wird eine Liste der verfügbaren Kernel geöffnet.
Wählen Sie bei Scala (Spark 2.4) Notebooks den Scala-Kernel aus und bestätigen Sie, indem Sie auf die Schaltfläche Auswählen klicken.

Initialisieren von SparkSession

Für alle Scala-Notebooks (Spark 2.4) müssen Sie die Sitzung mit dem folgenden Textbausteincode initialisieren:
Notebook Spark (Spark 2.3 - nicht mehr unterstützt) Scala (Spark 2.4)
Kernel Spark Scala
code kein Code erforderlich
import org.apache.spark.sql.{ SparkSession}val spark = SparkSession .builder() .master("local") .getOrCreate()


Das unten stehende Scala-Bild (Spark 2.4) hebt den wichtigen Unterschied bei der Initialisierung von sparkSession mit dem Spark 2.3 Spark-Kernel und Spark 2.4 Scala-Kernel hervor. In diesem Beispiel werden die Clustering -Starter-Notebooks verwendet, die in JupyterLab Launcher bereitgestellt werden.
Spark (Spark 2.3 - nicht mehr unterstützt)
Spark (Spark 2.3 - nicht mehr unterstützt) verwendet den Spark-Kernel, und deshalb mussten Sie Spark nicht definieren.
Scala (Spark 2.4)
Spark 2.4 mit dem Scala-Kernel zu verwenden erfordert, dass Sie definieren val spark und importieren, SparkSesson um Folgendes lesen oder schreiben zu können:

Abfragen

Mit Scala (Spark 2.4) wird %% sparkmagic nicht mehr unterstützt. Die folgenden Vorgänge können nicht mehr verwendet werden:
  • %%help
  • %%info
  • %%cleanup
  • %%delete
  • %%configure
  • %%local
In der folgenden Tabelle sind die Änderungen aufgeführt, die zum Konvertieren %%sql sparkmagischer Abfragen erforderlich sind:
Notebook Spark (Spark 2.3 - nicht mehr unterstützt) Scala (Spark 2.4)
Kernel Spark Scala
code
%%sql -o dfselect * from sparkdf


%%sql -o df -n limitselect * from sparkdf


%%sql -o df -qselect * from sparkdf


%%sql -o df -r fractionselect * from sparkdf


val df = spark.sql(''' SELECT * From sparkdf''')


val df = spark.sql(''' SELECT * From sparkdf LIMIT limit''')


val df = spark.sql(''' SELECT * From sparkdf LIMIT limit''')


val sample_df = df.sample(fraction) 

Das unten stehende Scala-Image (Spark 2.4) hebt die wesentlichen Unterschiede bei der Abfrage mit dem Spark 2.3 Spark-Kernel und dem Spark 2.4 Scala-Kernel hervor. In diesem Beispiel werden die Clustering -Starter-Notebooks verwendet, die in JupyterLab Launcher bereitgestellt werden.
Spark (Spark 2.3 - nicht mehr unterstützt)
Das Spark-Notebook (Spark 2.3 - nicht mehr unterstützt) verwendet den Spark-Kernel. Der Spark-Kernel unterstützt und verwendet %%sql sparkmagic.
Scala (Spark 2.4)
Der Scala-Kernel unterstützt nicht mehr %%sql sparkmagisches Licht. Bestehender sparkmagischer Code muss konvertiert werden.

Datensatz lesen

In Spark 2.3 mussten Sie Variablen für option Werte definieren, die zum Lesen von Daten oder zur Verwendung der Rohwerte in der Codezelle verwendet werden. In Scala können Sie einen Wert deklarieren und zurückgeben, sodass Variablen wie sys.env("PYDASDK_IMS_USER_TOKEN") var userToken z. B. nicht definiert werden müssen. Im Beispiel Scala (Spark 2.4) unten werden alle erforderlichen Werte zum Lesen eines Datensatzes definiert und zurückgegeben. sys.env
Verwenden von Spark (Spark 2.3 - nicht mehr unterstützt) - Spark Kernel
import com.adobe.platform.dataset.DataSetOptions
var df1 = spark.read.format("com.adobe.platform.dataset")
  .option(DataSetOptions.orgId, "310C6D375BA5248F0A494212@AdobeOrg")
  .option(DataSetOptions.batchId, "dbe154d3-197a-4e6c-80f8-9b7025eea2b9")
  .load("5e68141134492718af974844")

Verwenden von Scala (Spark 2.4) - Scala Kernel
import org.apache.spark.sql.{Dataset, SparkSession}
val spark = SparkSession.builder().master("local").getOrCreate()
val df1 = spark.read.format("com.adobe.platform.query")
  .option("user-token", sys.env("PYDASDK_IMS_USER_TOKEN"))
  .option("ims-org", sys.env("IMS_ORG_ID"))
  .option("api-key", sys.env("PYDASDK_IMS_CLIENT_ID"))
  .option("service-token", sys.env("PYDASDK_IMS_SERVICE_TOKEN"))
  .option("mode", "interactive")
  .option("dataset-id", "5e68141134492718af974844")
  .load()

element
Beschreibung
df1
Eine Variable, die den Pandas-Dataframe darstellt, mit dem Daten gelesen und geschrieben werden.
user-token
Ihr Benutzertoken, das automatisch mit sys.env("PYDASDK_IMS_USER_TOKEN") abgerufen wird.
service-token
Ihr Service-Token, das automatisch mit sys.env("PYDASDK_IMS_SERVICE_TOKEN") abgerufen wird.
ims-org
Ihre ims-org-ID, die automatisch mit sys.env("IMS_ORG_ID") abgerufen wird.
api-key
Ihr API-Schlüssel, der automatisch mit sys.env("PYDASDK_IMS_CLIENT_ID") abgerufen wird.
Die folgenden Bilder zeigen die wichtigsten Unterschiede beim Laden von Daten mit Spark 2.3 und Spark 2.4. In diesem Beispiel werden die Clustering -Starter-Notebooks verwendet, die in JupyterLab Launcher bereitgestellt werden.
Spark (Spark 2.3 - nicht mehr unterstützt)
Das Spark-Notebook (Spark 2.3 - nicht mehr unterstützt) verwendet den Spark-Kernel. Die folgenden beiden Zellen zeigen ein Beispiel für das Laden des Datensatzes mit einer angegebenen Datensatz-ID im Datumsbereich (2019-3-21, 2019-3-29).
Scala (Spark 2.4)
Das Scala-Notebook (Spark 2.4) verwendet den Scala-Kernel, der bei der Einrichtung mehr Werte benötigt, wie in der ersten Codezelle hervorgehoben. Darüber hinaus var mdata müssen mehr option Werte ausgefüllt werden. In diesem Notebook ist der zuvor erwähnte Code für die Initialisierung von SparkSession in der var mdata Codemelle enthalten.
In Scala können Sie einen Wert deklarieren und sys.env() von innen zurückgeben option . Dadurch müssen Variablen nicht mehr definiert werden, wenn Sie wissen, dass sie nur einmal verwendet werden. Das folgende Beispiel nimmt val userToken das oben stehende Beispiel und deklariert es in Zeile option :
.option("user-token", sys.env("PYDASDK_IMS_USER_TOKEN"))

Schreiben in einen Datensatz

Ähnlich wie beim Lesen eines Datensatzes erfordert das Schreiben in einen Datensatz zusätzliche option Werte, die im Beispiel unten beschrieben werden. In Scala können Sie einen Wert deklarieren und zurückgeben, sodass Variablen wie sys.env("PYDASDK_IMS_USER_TOKEN") var userToken z. B. nicht definiert werden müssen. Im unten stehenden Beispiel zur Skala sys.env werden alle erforderlichen Werte definiert und an einen Datensatz zurückgegeben.
Verwenden von Spark (Spark 2.3 - nicht mehr unterstützt) - Spark Kernel
import com.adobe.platform.dataset.DataSetOptions

var userToken = spark.sparkContext.getConf.getOption("spark.yarn.appMasterEnv.USER_TOKEN").get
var serviceToken = spark.sparkContext.getConf.getOption("spark.yarn.appMasterEnv.SERVICE_TOKEN").get
var serviceApiKey = spark.sparkContext.getConf.getOption("spark.yarn.appMasterEnv.SERVICE_API_KEY").get

df1.write.format("com.adobe.platform.dataset")
  .option(DataSetOptions.orgId, "310C6D375BA5248F0A494212@AdobeOrg")
  .option(DataSetOptions.userToken, userToken)
  .option(DataSetOptions.serviceToken, serviceToken)
  .option(DataSetOptions.serviceApiKey, serviceApiKey)
  .save("5e68141134492718af974844")

Verwenden von Scala (Spark 2.4) - Scala Kernel
import org.apache.spark.sql.{Dataset, SparkSession}

val spark = SparkSession.builder().master("local").getOrCreate()

df1.write.format("com.adobe.platform.query")
  .option("user-token", sys.env("PYDASDK_IMS_USER_TOKEN"))
  .option("service-token", sys.env("PYDASDK_IMS_SERVICE_TOKEN"))
  .option("ims-org", sys.env("IMS_ORG_ID"))
  .option("api-key", sys.env("PYDASDK_IMS_CLIENT_ID"))
  .option("mode", "interactive")
  .option("dataset-id", "5e68141134492718af974844")
  .save()

element
Beschreibung
df1
Eine Variable, die den Pandas-Dataframe darstellt, mit dem Daten gelesen und geschrieben werden.
user-token
Ihr Benutzertoken, das automatisch mit sys.env("PYDASDK_IMS_USER_TOKEN") abgerufen wird.
service-token
Ihr Service-Token, das automatisch mit sys.env("PYDASDK_IMS_SERVICE_TOKEN") abgerufen wird.
ims-org
Ihre ims-org-ID, die automatisch mit sys.env("IMS_ORG_ID") abgerufen wird.
api-key
Ihr API-Schlüssel, der automatisch mit sys.env("PYDASDK_IMS_CLIENT_ID") abgerufen wird.