0 / 0
Go back to the English version of the documentation
Pisanie skryptów w języku Python for Spark
Last updated: 22 wrz 2023
Tworzenie skryptów w języku Python for Spark (SPSS Modeler)

Program SPSS Modeler może uruchamiać skrypty Python , korzystając z środowiska Apache Spark w celu przetwarzania danych. W niniejszej dokumentacji przedstawiono opisy interfejsu API środowiska Python w zakresie udostępnionych interfejsów.

Instalacja programu SPSS Modeler obejmuje dystrybucję Spark.

Uzyskiwanie dostępu do danych

Dane są przekazywane między skryptem Python/Spark a kontekstem wykonania w formie obiektu ramki danych — Spark SQL DataFrame. Skrypt, który konsumuje dane (czyli dowolny węzeł z wyjątkiem węzła importu), musi pobrać ramkę danych z kontekstu:
inputData = asContext.getSparkInputData()
Skrypt generujący dane (tj. każdy węzeł z wyjątkiem końcowego) musi zwrócić ramkę danych do kontekstu:
asContext.setSparkOutputData(outputData)
W razie potrzeby można użyć kontekstu SQL do utworzenia wyjściowej ramki danych z RDD:
outputData = sqlContext.createDataFrame(rdd)

Definiowanie modelu danych

Węzeł, który generuje dane, musi także zdefiniować model danych opisujący zmienne widoczne za węzłem. W terminologii środowiska Spark SQL model danych jest schematem.

Skrypt Python/Spark definiuje model danych wyjściowych w postaci obiektu pyspsark.sql.types.StructType. Obiekt StructType opisuje wiersz w ramce danych wyjściowych i składa się z listy obiektów StructField. Każdy obiekt StructField opisuje jedna zmienną w modelu danych wyjściowych.

Można uzyskać model danych wejściowych za pośrednictwem atrybutu :schema ramki danych wejściowych:
inputSchema = inputData.schema
Zmienne przekazywane bez zmian można skopiować z modelu danych wejściowych do modelu danych wyjściowych. Zmienne nowe lub zmodyfikowane w modelu danych wyjściowych można tworzyć za pomocą konstruktora obiektu StructField:
field = StructField(name, dataType, nullable=True, metadata=None)

Informacje o konstruktorze zawiera dokumentacja środowiska Spark.

Należy podać nazwę i typ danych co najmniej jednej zmiennej. Opcjonalnie można określić metadane w celu udostępnienia miary, roli i opisu dla pola (patrz sekcja Metadane danych).

Tryb DataModelOnly

Program SPSS Modeler musi znać model danych wyjściowych dla węzła, zanim węzeł zostanie uruchomiony, aby umożliwić jego edytowanie. Aby uzyskać wyjściowy model danych dla węzła Python/Spark, program SPSS Modeler uruchamia skrypt w specjalnym trybie tylko model danych , w którym nie ma dostępnych danych. Skrypt może wykryć, że działa w tym trybie, używając metody isComputeDataModelOnly obiektu kontekstu serwera Analytic Server.

Skrypt węzła przekształcenia może mieć następującą strukturę ogólną:
if asContext.isComputeDataModelOnly():   
        inputSchema = asContext.getSparkInputSchema()   
        outputSchema = ... # construct the output data model   
        asContext.setSparkOutputSchema(outputSchema)
else:   
        inputData = asContext.getSparkInputData()   
        outputData = ... # construct the output data frame    
        asContext.setSparkOutputData(outputData)

Budowanie modelu

Węzeł tworzący model musi zwrócić do kontekstu wykonania jakąś treść, która opisuje model na tyle szczegółowo, by węzeł stosujący ten model mógł go później dokładnie odtworzyć.

Treść modelu jest definiowana w postaci par klucz/wartość, w których znaczenie kluczy i wartości jest znane tylko dla węzłów budowania i oceny i nie jest interpretowane przez program SPSS Modeler w żaden sposób. Opcjonalnie węzeł może przypisać typ MIME do wartości z zamiarem, aby program SPSS Modeler mógł wyświetlać te wartości, które mają znane typy do użytkownika w modelu użytkowym.

Wartością w tym kontekście może być PMML, HTML, obraz itp. Aby dodać wartość do zawartości modelu (w skrypcie budowania):
asContext.setModelContentFromString(key, value, mimeType=None)
Aby odczytać wartość z treści modelu (w skrypcie oceniającym):
value = asContext.getModelContentToString(key)
Jako skrót, w którym model lub część modelu jest przechowywana w pliku lub folderze w systemie plików, można zpakować całą treść zapisaną w tym położeniu w jednym wywołaniu (w skrypcie budowania):
asContext.setModelContentFromPath(key, path)

Należy zauważyć, że w tym przypadku nie można określić typu MIME, ponieważ pakunek może zawierać treści różnego typu.

Jeśli potrzebne jest tymczasowe miejsce do przechowywania treści podczas budowania modelu, można uzyskać odpowiednią lokalizację z kontekstu:
path = asContext.createTemporaryFolder()
Aby pobrać istniejącą treść do lokalizacji tymczasowej w systemie plików (w skrypcie oceniającym):
path = asContext.getModelContentToPath(key)

Obsługa błędów

Aby podnieść poziom błędów, należy zgłosić wyjątek od skryptu i wyświetlić go do użytkownika SPSS Modeler . Niektóre wyjątki są predefiniowane w module spss.pyspark.exceptions. Na przykład:
from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
     raise ASContextException("message to display to user")
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more