Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Important
Dieses Feature befindet sich in der Public Preview.
Diese Seite beschreibt die YAML-Konfiguration für benutzerdefinierte Operatoren in Lakeflow Designer. Alle Operatortypen (uc-udfuc-udtf, und python-run-function) verwenden das user-defined-operator-v0.1.0 Schema, das Konfigurationsfelder mithilfe des JSON-Schemaformats definiert.
Informationen zum Erstellen benutzerdefinierter Operatoren finden Sie unter User-defined operators in Lakeflow Designer.
Stammeigenschaften
Jede YaML-Operatordatei beginnt mit einer Reihe von Stammeigenschaften, die den Operator identifizieren und sein Verhalten definieren. Das folgende Beispiel zeigt die allgemeine Struktur:
schema: user-defined-operator-v0.1.0
type: python-run-function
name: My Operator
id: my_operator
version: '1.0.0'
description: >
What this operator does.
Can be multiple lines.
config:
type: object
properties:
my_field:
type: string
title: My Field
description: Help text
ports:
input:
- name: data
title: Input Data
output:
- name: out
title: Output
run_function:
type: inline
code: |
def run(config, inputs, spark):
return {"out": inputs["data"]}
environment:
environment_version: '4'
dependencies:
- 'pandas>=2.0'
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
schema |
string | Ja | Schemabezeichner. Muss user-defined-operator-v0.1.0 sein. |
type |
string | Ja | Operatortyp: uc-udf, uc-udtf, oder python-run-function. |
name |
string | Ja | Anzeigename für den Operator. Halten Sie es kurz, um die Lakeflow Designer-UI anzupassen. Mindestlänge von 1 Zeichen. |
id |
string | Ja | Eindeutiger Bezeichner für den Operatortyp. Mindestlänge von 1 Zeichen. Erwägen Sie die Verwendung von Namespaces (z finance. . B. oder ml.) zum Kategorisieren von Operatoren. |
description |
string | Ja | Detaillierte Beschreibung der Funktionsweise des Operators. Benutzern in der Benutzeroberfläche angezeigt. Verwenden Sie die mehrzeilige YaML-Syntax (>) für längere Beschreibungen. |
config |
Objekt | Ja | JSON-Schemaobjekt, das Konfigurationsfelder definiert. Siehe "Config". |
ports |
Objekt | No | Eingabe- und Ausgabeportdefinitionen. Siehe Ports. |
version |
string | Ja | Versionszeichenfolge (z. B "1.0.0". ). Verwenden Sie dies, um Ihre eigenen Betreiberversionen nachzuverfolgen. |
run_function |
Objekt | No | Inline-Python Code für python-run-functionOperatoren. Siehe run_function. |
environment |
Objekt | No | Python Umgebungskonfiguration, einschließlich Abhängigkeiten. Siehe environment. |
Häfen
Ports definieren, wie Ihr Operator eine Verbindung mit anderen Operatoren in der Pipeline herstellt. Das ports Objekt enthält input und output Arrays.
ports:
input:
- name: input_data
title: Input Data
mime: application/vnd.databricks.dataframe
allowMultiple: true
required: true
output:
- name: out
title: Output
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
name |
string | Ja | Eindeutiger Bezeichner für den Port. Wird in Verbindungen und Konfigurationsverweise verwendet. |
title |
string | No | Lesbare Beschriftung, die auf der Benutzeroberfläche angezeigt wird. |
mime |
string | No | MIME-Typ für die Portdaten. Beispiel: application/vnd.databricks.dataframe |
allowMultiple |
boolean | No | Wenn trueder Port mehrere eingehende Verbindungen akzeptiert. |
required |
boolean | No | Wenn falseder Port optional ist. Standardwert: true. |
Nur die dokumentierten Porteigenschaften werden akzeptiert. Unbekannte Schlüssel (z. B. das Legacyfeld label ) werden von der Schemaüberprüfung abgelehnt.
Portbeispiele
UDF mit Eingabe- und Ausgabeports:
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
UDTF mit Eingabe- und Ausgabeports:
ports:
input:
- name: input_data
title: Input Data
output:
- name: clustered_data
title: Clustered Results
python-run-function with multiple input and an optional port:
ports:
input:
- name: main_data
title: Main Data
- name: reference_data
title: Reference Table
required: false
output:
- name: joined_output
title: Joined Output
Konfiguration
Das config Feld ist ein JSON-Schemaobjekt. Sie definieren jedes Konfigurationsfeld als Eigenschaft innerhalb des Schemas. Dieses Format bietet Ihnen Zugriff auf standardmäßige JSON-Schemaüberprüfungsfeatures wie enum, , minimum, maximumund examples.
Das config Objekt muss und eine properties Karte aufweisentype: object. Sie können optional required (ein Array von erforderlichen Eigenschaftennamen) und additionalProperties.
config:
type: object
properties:
cluster_count:
type: number
title: Number of Clusters
description: How many clusters to create
default: 3
minimum: 1
maximum: 100
algorithm:
type: string
title: Algorithm
description: Clustering algorithm to use
enum: ['kmeans', 'dbscan', 'hierarchical']
default: kmeans
feature_col:
type: string
title: Feature Column
description: Column to use as input
format: expression
x-ui:
widget: expression
port: data
required: [cluster_count, feature_col]
additionalProperties: false
Config-Eigenschaftsfelder
Jede Eigenschaft im config.properties Objekt unterstützt die folgenden standardmäßigen JSON-Schemafelder:
| Feld | Typ | Description |
|---|---|---|
type |
string | Datentyp: string, , number, integer, boolean, , arrayoder object. |
title |
string | Lesbare Beschriftung, die auf der Benutzeroberfläche angezeigt wird. |
description |
string | Hilfetext, der Benutzern angezeigt wird. |
default |
Beliebig | Standardwert für das Feld. |
examples |
array | Beispielwerte für das Feld. |
enum |
array | Feste Liste zulässiger Werte. |
format |
string | Semantischer Typhinweis. Siehe Formatwerte. |
minimum |
number | Minimal zulässiger Wert (für number und integer Typen). |
maximum |
number | Maximal zulässiger Wert (für number und integer Typen). |
items |
Objekt | Schema für Arrayelemente (in diesem typearrayFall). |
properties |
Objekt | Verschachtelte Eigenschaftsdefinitionen (wenn type vorhanden).object |
required |
array | Liste der erforderlichen geschachtelten Eigenschaftennamen (wenn type vorhanden).object |
Andere standardmäßige JSON-Schemafelder wie minLength, maxLength, patternund const werden ebenfalls unterstützt.
Formatieren von Werten
Das format Feld für eine Config-Eigenschaft stellt einen semantischen Typhinweis bereit, der Lakeflow Designer angibt, wie der Wert interpretiert wird. Diese Hinweise ermöglichen spezielles Benutzeroberflächenverhalten und -validierung.
| Format | Description |
|---|---|
expression |
Spaltenverweis oder SQL-Ausdruck. |
table_source |
Tabellenquellverweis. |
file_source |
Dateiquellverweis. |
column_expressions |
Spaltenausdrücke. |
sort_expressions |
Sortierausdrücke. |
aggregation_expressions |
Aggregationsausdrücke. |
ai_function_expressions |
KI-Funktionsausdrücke. |
is_preview |
Flag für den automatischen Vorschaumodus. Lakeflow Designer legt dies true während der Workflowvorschau fest. Der Name der Config-Eigenschaft ist beliebig – nur das format: is_preview Tag ist wichtig. Verwenden Sie diese Einstellung, um Nebeneffekte wie externe API-Aufrufe während der Vorschau zu überspringen. |
string[] |
Zeichenfolgenarray. |
UI-Widgets
Widgets passen an, wie ein Konfigurationsfeld in der Lakeflow Designer-Schnittstelle gerendert wird. Definieren Sie Widgets in der x-ui Eigenschaft für jede Konfigurationseigenschaft. Wenn Sie das Widget weglassen, verwendet Lakeflow Designer ein Standard-Widget basierend auf dem Datentyp.
| Widget | Datentyp | Description |
|---|---|---|
input |
string | Einzeilige Texteingabe. |
textarea |
string | Mehrzeiligen Textbereich. Unterstützt optionale rows Eigenschaft. |
checkbox |
boolean | Standardkontrollkästchen. |
toggle |
boolean | Umschalter. |
number |
Zahl/Ganze Zahl | Numerische Eingabe mit optionalen Einschränkungen. |
slider |
Zahl/Ganze Zahl | Visueller Schieberegler für numerische Bereiche. Unterstützt optionale step Eigenschaft. |
select |
string | Dropdownliste mit einzelner Auswahl. Erfordert optionsSource. |
multi-select |
array | Dropdownliste mit mehrfacher Auswahl. Erfordert optionsSource. |
expression |
string | Spalten-/Ausdrucksmarkierer. Erfordert port. |
input
Einzeiliges Texteingabefeld.
api_endpoint:
type: string
title: API Endpoint
x-ui:
widget: input
textarea
Mehrzeiligen Textbereich für längere Inhalte. Unterstützt eine optionale rows Eigenschaft zum Steuern der Höhe.
message_body:
type: string
title: Message Body
x-ui:
widget: textarea
rows: 4
checkbox
Standardkontrollkästchen für boolesche Werte.
send_notification:
type: boolean
title: Send Notification
default: false
x-ui:
widget: checkbox
toggle
Umschalter für boolesche Werte.
enable_logging:
type: boolean
title: Enable Logging
default: true
x-ui:
widget: toggle
number
Numerisches Eingabefeld. Verwenden Sie minimum die Eigenschaft selbst, maximum um den Bereich einzuschränken.
num_clusters:
type: number
title: Number of Clusters
default: 3
minimum: 1
maximum: 100
x-ui:
widget: number
slider
Visueller Schieberegler zum Auswählen numerischer Werte innerhalb eines Bereichs. Verwenden Sie minimum die Eigenschaft, maximum um den Bereich festzulegen, und legen Sie ihn fest, und step legen Sie ihn x-ui fest, um den Inkrement zu steuern.
confidence_threshold:
type: number
title: Confidence Threshold
default: 0.8
minimum: 0
maximum: 1
x-ui:
widget: slider
step: 0.05
select
Dropdownliste mit einzelner Auswahl. Erfordert eine optionsSource Definition, aus der die Dropdownwerte stammen. Siehe "Optionen"-Quellen.
aggregation_type:
type: string
title: Aggregation Type
x-ui:
widget: select
optionsSource:
type: static
values: ['sum', 'avg', 'min', 'max', 'count']
multi-select
Mehrfachauswahldropdown zum Auswählen mehrerer Werte. Wird für items: { type: string } die Eigenschaft verwendettype: array. Erfordert eine optionsSource. Siehe "Optionen"-Quellen.
feature_columns:
type: array
title: Feature Columns
items:
type: string
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: input_data
expression
Spalten-/Ausdrucksauswahl, mit der Benutzer eine Spalte aus Eingabedaten auswählen oder einen benutzerdefinierten SQL-Ausdruck schreiben können. Legen Sie format: expression die Eigenschaft fest, und geben Sie die Eingabe port in x-ui. Dies ist nützlich:
- Wenn der Benutzer eine Spalte aus den Eingabedaten auswählen soll.
- Wenn der Benutzer möglicherweise einen benutzerdefinierten SQL-Ausdruck schreiben möchte.
- Für Parameter, die auf dynamische Daten in der Pipeline verweisen.
amount:
type: string
title: Amount
format: expression
x-ui:
widget: expression
port: input_data
Optionsquellen
Für select und multi-select Widgets müssen Sie definieren, wo die Dropdownoptionen verwendet optionsSourcewerden.
Statische Optionen
Eine feste Liste von Werten, die im YAML definiert sind.
optionsSource:
type: static
values: ['option1', 'option2', 'option3']
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
type |
string | Ja | Muss static sein. |
values |
array | Ja | Array von Zeichenfolgenwerten für das Dropdown. |
Eingabespalten
Füllt die Dropdownliste dynamisch mit Spaltennamen aus einem Eingabeport auf.
optionsSource:
type: inputColumns
port: input_data
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
type |
string | Ja | Muss inputColumns sein. |
port |
string | Ja | Der Name des Eingabeports, aus dem Spaltennamen abgerufen werden sollen. Muss mit einem name Ihrer definierten Eingabeports übereinstimmen. |
run_function
Mit der Eigenschaft run_function können Sie Python Code direkt in die YAML-Konfiguration für python-run-function Operatoren einbetten. Dadurch ist es nicht erforderlich, eine separate Unity-Katalogfunktion zu registrieren.
run_function:
type: inline
code: |
def run(config, inputs, spark):
df = inputs["data"]
threshold = config["threshold"]
return {"out": df.filter(df["score"] > threshold)}
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
type |
string | Ja | Muss inline sein. |
code |
string | Ja | Python Quellcode. Muss eine run() Funktion definieren. |
Die run() Funktion empfängt drei Argumente:
-
config: Ein Vom Benutzer in der Benutzeroberfläche festgelegtes Wörterbuch mit Konfigurationswerten. -
inputs: Eine Wörterbuchzuordnung von Eingabeportnamen zu DataFrames. -
spark: Die aktive SparkSession.
Die Funktion muss die Ausgabeportnamen der Wörterbuchzuordnung an DataFrames zurückgeben. Die Schlüssel müssen exakt mit dem name Feld der einzelnen Ausgabeports übereinstimmen, die in ports.output. Beispiel: mit einem Ausgabeport mit dem Namen out:
return {"out": result_df}
Mit mehreren Ausgabeports:
return {"match": match_df, "rest": rest_df}
environment
Die Eigenschaft environment gibt die Python Umgebung für operatoren python-run-function an. Verwenden Sie sie, um die Umgebungsversion anzuheften und Pip-Abhängigkeiten zu deklarieren.
environment:
environment_version: '4'
dependencies:
- 'scikit-learn>=1.3'
- 'pandas>=2.0'
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
environment_version |
string | No | Die zu verwendende Umgebungsversion. Beispiel: "4" |
dependencies |
Feld von Zeichenfolgen | No | Liste der Pip-Abhängigkeitsbezeichner. Jeder Eintrag folgt der Standardmäßigen Pipsyntax (z. B "pandas>=2.0". ). |
Vollständige Beispiele
UC-basierte UDF
In diesem Beispiel wird ein Unity Catalog-basierter UDF-Operator definiert, der zinsverzinste Zinsen berechnet.
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Compound Interest
id: finance.compound_interest
version: '1.0.0'
description: >
Calculates compound interest based on principal, rate, and time period.
config:
type: object
properties:
principal:
type: string
title: Principal Amount
format: expression
x-ui:
widget: expression
port: input_data
annual_rate:
type: number
title: Annual Interest Rate
default: 5.0
minimum: 0
maximum: 100
x-ui:
widget: number
years:
type: number
title: Number of Years
default: 10
minimum: 1
maximum: 50
x-ui:
widget: slider
step: 1
compound_frequency:
type: string
title: Compounding Frequency
default: 'monthly'
x-ui:
widget: select
optionsSource:
type: static
values: ['daily', 'monthly', 'quarterly', 'annually']
required: [principal, annual_rate]
additionalProperties: false
ports:
input:
- name: input_data
title: Input Data
output:
- name: out
title: Output
Python Run-Function-Operator
In diesem Beispiel wird ein python-run-function Operator definiert, der Kunden mit K-Means-Clustering segmentiert.
schema: user-defined-operator-v0.1.0
type: python-run-function
name: Customer Segmentation
id: ml.customer_segmentation
version: '1.2.0'
description: >
Segments customers into groups based on selected features
using K-Means clustering. Returns customer IDs with their
assigned segment numbers.
config:
type: object
properties:
num_segments:
type: integer
title: Number of Segments
description: How many customer segments to create
default: 3
minimum: 2
maximum: 20
x-ui:
widget: number
customer_id_column:
type: string
title: Customer ID Column
description: Column containing customer identifiers
x-ui:
widget: select
optionsSource:
type: inputColumns
port: customer_data
feature_columns:
type: array
title: Feature Columns
description: Columns to use for segmentation
items:
type: string
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: customer_data
normalize_features:
type: boolean
title: Normalize Features
description: Whether to normalize feature values before clustering
default: true
x-ui:
widget: toggle
required: [num_segments, customer_id_column, feature_columns]
additionalProperties: false
ports:
input:
- name: customer_data
title: Customer Data
mime: application/vnd.databricks.dataframe
output:
- name: segmented_customers
title: Segmented Customers
run_function:
type: inline
code: |
def run(config, inputs, spark):
from pyspark.ml.feature import VectorAssembler, StandardScaler
from pyspark.ml.clustering import KMeans
df = inputs["customer_data"]
id_col = config["customer_id_column"]
features = config["feature_columns"]
k = config["num_segments"]
normalize = config.get("normalize_features", True)
assembler = VectorAssembler(inputCols=features, outputCol="features_vec")
assembled = assembler.transform(df)
if normalize:
scaler = StandardScaler(inputCol="features_vec", outputCol="scaled_features")
model = scaler.fit(assembled)
assembled = model.transform(assembled)
feature_col = "scaled_features"
else:
feature_col = "features_vec"
kmeans = KMeans(k=k, featuresCol=feature_col, predictionCol="segment")
result = kmeans.fit(assembled).transform(assembled)
return {"segmented_customers": result.select(id_col, "segment")}
environment:
environment_version: '4'
dependencies:
- 'scikit-learn>=1.3'
Kurzreferenz
Erforderliche Stammeigenschaften
-
schema:user-defined-operator-v0.1.0 -
name: Anzeigename -
id: Eindeutiger Bezeichner -
description: Funktionsweise des Operators -
config: JSON-Schemaobjekt -
type:uc-udf, ,uc-udtfoderpython-run-function -
version: Autordefinierte Versionszeichenfolge
Optionale Stammeigenschaften
-
ports: Eingabe- und Ausgabeportdefinitionen -
run_function: Inline-Python Code (nurpython-run-function) -
environment: Python Umgebung und Abhängigkeiten (nurpython-run-function)
Config-Eigenschaftsdatentypen
string | boolean | number | integer | array | object
UI-Widgets
input | textarea | checkbox | toggle | number | slider | select | multi-select | expression
Optionsquellen
static (feste Werte) | inputColumns (vom Eingabeport)
Formatieren von Werten
expression | table_source | file_source | column_expressions | sort_expressions | aggregation_expressions | ai_function_expressions | is_preview | string[]