Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Questa funzionalità è in Anteprima Pubblica.
Questa pagina descrive la configurazione YAML per gli operatori definiti dall'utente in Lakeflow Designer. Tutti i tipi di operatore (uc-udf, uc-udtfe python-run-function) usano lo user-defined-operator-v0.1.0 schema , che definisce i campi di configurazione usando il formato dello schema JSON.
Per informazioni su come creare operatori definiti dall'utente, vedere Operatori definiti dall'utente in Lakeflow Designer.
Proprietà radice
Ogni file YAML dell'operatore inizia con un set di proprietà radice che identificano l'operatore e ne definiscono il comportamento. L'esempio seguente illustra la struttura generale:
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'
| Proprietà | Tipo | Obbligatorio | Description |
|---|---|---|---|
schema |
string | Yes | Identificatore dello schema. Deve essere user-defined-operator-v0.1.0. |
type |
string | Yes | Tipo di operatore: uc-udf, uc-udtfo python-run-function. |
name |
string | Yes | Nome visualizzato per l'operatore. Mantieni breve l'interfaccia utente di Lakeflow Designer. Lunghezza minima di 1 carattere. |
id |
string | Yes | Identificatore univoco per il tipo di operatore. Lunghezza minima di 1 carattere. Prendere in considerazione l'uso di spazi dei nomi (ad esempio finance. o ml.) per classificare gli operatori. |
description |
string | Yes | Descrizione dettagliata delle operazioni dell'operatore. Mostrata agli utenti nell'interfaccia utente. Usare la sintassi multilinea YAML (>) per descrizioni più lunghe. |
config |
object | Yes | Oggetto Schema JSON che definisce i campi di configurazione. Vedere Configurazione. |
ports |
object | No | Definizioni di porte di input e output. Vedere Porte. |
version |
string | Yes | Stringa di versione (ad esempio, "1.0.0"). Usare questa opzione per tenere traccia delle versioni dell'operatore. |
run_function |
object | No | Codice di Python inline per gli operatori /> run_function. |
environment |
object | No | Python configurazione dell'ambiente, incluse le dipendenze. Vedete environment. |
Porti
Le porte definiscono il modo in cui l'operatore si connette ad altri operatori nella pipeline. L'oggetto ports contiene input matrici e output .
ports:
input:
- name: input_data
title: Input Data
mime: application/vnd.databricks.dataframe
allowMultiple: true
required: true
output:
- name: out
title: Output
| Proprietà | Tipo | Obbligatorio | Description |
|---|---|---|---|
name |
string | Yes | Identificatore univoco per la porta. Usato nelle connessioni e nei riferimenti di configurazione. |
title |
string | No | Etichetta leggibile visualizzata nell'interfaccia utente. |
mime |
string | No | Tipo MIME per i dati della porta. Ad esempio: application/vnd.databricks.dataframe. |
allowMultiple |
boolean | No | Se true, la porta accetta più connessioni in ingresso. |
required |
boolean | No | Se false, la porta è facoltativa. Impostazione predefinita: true. |
Vengono accettate solo le proprietà di porta documentate. Le chiavi sconosciute ,ad esempio il campo legacy label , vengono rifiutate dalla convalida dello schema.
Esempi di porte
Funzione definita dall'utente con porte di input e output:
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
UDTF con porte di input e output:
ports:
input:
- name: input_data
title: Input Data
output:
- name: clustered_data
title: Clustered Results
python-run-function con più input e una porta facoltativa:
ports:
input:
- name: main_data
title: Main Data
- name: reference_data
title: Reference Table
required: false
output:
- name: joined_output
title: Joined Output
Config
Il config campo è un oggetto Schema JSON. Ogni campo di configurazione viene definito come proprietà all'interno dello schema. Questo formato consente di accedere alle funzionalità standard di convalida dello schema JSON, ad enumesempio , minimummaximume examples.
L'oggetto config deve avere type: object e una properties mappa. Facoltativamente, è possibile includere required (una matrice di nomi di proprietà obbligatori) e 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
Campi delle proprietà config
Ogni proprietà nell'oggetto config.properties supporta i campi dello schema JSON standard seguenti:
| Campo | Tipo | Description |
|---|---|---|
type |
string | Tipo di dati: string, number, booleaninteger, array, o object. |
title |
string | Etichetta leggibile visualizzata nell'interfaccia utente. |
description |
string | Testo della Guida visualizzato agli utenti. |
default |
any | Valore predefinito per il campo. |
examples |
array | Valori di esempio per il campo. |
enum |
array | Elenco fisso di valori consentiti. |
format |
string | Hint per il tipo semantico. Vedere Formattare i valori. |
minimum |
number | Valore minimo consentito (per number i tipi e integer ). |
maximum |
number | Valore massimo consentito (per number i tipi e integer ). |
items |
object | Schema per gli elementi della matrice (quando type è array). |
properties |
object | Definizioni di proprietà annidate (quando type è object). |
required |
array | Elenco dei nomi di proprietà annidati obbligatori (quando type è object). |
Sono supportati anche altri campi standard dello schema JSON, ad minLengthesempio , maxLengthpattern, e const .
Formattare i valori
Il format campo in una proprietà config fornisce un hint di tipo semantico che indica a Lakeflow Designer come interpretare il valore. Questi hint consentono il comportamento e la convalida specializzati dell'interfaccia utente.
| Formato | Description |
|---|---|
expression |
Riferimento a colonne o espressione SQL. |
table_source |
Riferimento all'origine della tabella. |
file_source |
Riferimento all'origine file. |
column_expressions |
Espressioni di colonna. |
sort_expressions |
Ordinare le espressioni. |
aggregation_expressions |
Espressioni di aggregazione. |
ai_function_expressions |
Espressioni di funzione di intelligenza artificiale. |
is_preview |
Flag modalità di anteprima automatica. Lakeflow Designer imposta questa proprietà su true durante l'anteprima del flusso di lavoro. Il nome della proprietà config è arbitrario, ma solo il format: is_preview tag è importante. Usare questa opzione per ignorare gli effetti collaterali, ad esempio le chiamate API esterne durante l'anteprima. |
string[] |
Matrice di stringhe. |
Widget dell'interfaccia utente
I widget personalizzano il rendering di un campo di configurazione nell'interfaccia di Lakeflow Designer. Definire i widget nella x-ui proprietà in ogni proprietà config. Se si omette il widget, Lakeflow Designer usa un widget predefinito basato sul tipo di dati.
| Widget | Tipo di dati | Description |
|---|---|---|
input |
string | Input di testo a riga singola. |
textarea |
string | Area di testo a più righe. Supporta la proprietà facoltativa rows . |
checkbox |
boolean | Casella di controllo Standard. |
toggle |
boolean | Interruttore Attiva/Disattiva. |
number |
numero/numero intero | Input numerico con vincoli facoltativi. |
slider |
numero/numero intero | Dispositivo di scorrimento visivo per intervalli numerici. Supporta la proprietà facoltativa step . |
select |
string | Elenco a discesa a selezione singola. Richiede optionsSource. |
multi-select |
array | Elenco a discesa a selezione multipla. Richiede optionsSource. |
expression |
string | Selettore di colonne/espressioni. Richiede port. |
input
Campo di input di testo a riga singola.
api_endpoint:
type: string
title: API Endpoint
x-ui:
widget: input
textarea
Area di testo a più righe per un contenuto più lungo. Supporta una proprietà facoltativa rows per controllare l'altezza.
message_body:
type: string
title: Message Body
x-ui:
widget: textarea
rows: 4
checkbox
Casella di controllo standard per i valori booleani.
send_notification:
type: boolean
title: Send Notification
default: false
x-ui:
widget: checkbox
toggle
Interruttore attiva/disattiva per i valori booleani.
enable_logging:
type: boolean
title: Enable Logging
default: true
x-ui:
widget: toggle
number
Campo di input numerico. Utilizzare minimum e maximum sulla proprietà stessa per vincolare l'intervallo.
num_clusters:
type: number
title: Number of Clusters
default: 3
minimum: 1
maximum: 100
x-ui:
widget: number
slider
Dispositivo di scorrimento visivo per la selezione di valori numerici all'interno di un intervallo. Utilizzare minimum e maximum sulla proprietà per impostare l'intervallo e step in x-ui per controllare l'incremento.
confidence_threshold:
type: number
title: Confidence Threshold
default: 0.8
minimum: 0
maximum: 1
x-ui:
widget: slider
step: 0.05
select
Elenco a discesa a selezione singola. Richiede un optionsSource oggetto per definire il percorso da cui provengono i valori dell'elenco a discesa. Vedere Origini delle opzioni.
aggregation_type:
type: string
title: Aggregation Type
x-ui:
widget: select
optionsSource:
type: static
values: ['sum', 'avg', 'min', 'max', 'count']
multi-select
Elenco a discesa a selezione multipla per la scelta di più valori. Utilizzare type: array con items: { type: string } nella proprietà . Richiede un oggetto optionsSource. Vedere Origini delle opzioni.
feature_columns:
type: array
title: Feature Columns
items:
type: string
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: input_data
expression
Selettore di colonne/espressioni che consente agli utenti di selezionare una colonna dai dati di input o scrivere un'espressione SQL personalizzata. Impostare format: expression sulla proprietà e specificare l'input port in x-ui. Ciò è utile:
- Quando l'utente deve selezionare una colonna dai dati di input.
- Quando l'utente potrebbe voler scrivere un'espressione SQL personalizzata.
- Per i parametri che fanno riferimento a dati dinamici nella pipeline.
amount:
type: string
title: Amount
format: expression
x-ui:
widget: expression
port: input_data
Origini opzioni
Per select i widget e multi-select è necessario definire la posizione da cui provengono le opzioni di elenco a discesa usando optionsSource.
Opzioni statiche
Elenco fisso di valori definiti in YAML.
optionsSource:
type: static
values: ['option1', 'option2', 'option3']
| Proprietà | Tipo | Obbligatorio | Description |
|---|---|---|---|
type |
string | Yes | Deve essere static. |
values |
array | Yes | Matrice di valori stringa per l'elenco a discesa. |
Colonne di input
Popola dinamicamente l'elenco a discesa con i nomi di colonna da una porta di input.
optionsSource:
type: inputColumns
port: input_data
| Proprietà | Tipo | Obbligatorio | Description |
|---|---|---|---|
type |
string | Yes | Deve essere inputColumns. |
port |
string | Yes | Nome della porta di input da cui ottenere i nomi delle colonne. Deve corrispondere a name di una delle porte di input definite. |
run_function
La proprietà
run_function:
type: inline
code: |
def run(config, inputs, spark):
df = inputs["data"]
threshold = config["threshold"]
return {"out": df.filter(df["score"] > threshold)}
| Proprietà | Tipo | Obbligatorio | Description |
|---|---|---|---|
type |
string | Yes | Deve essere inline. |
code |
string | Yes | Python codice sorgente. Deve definire una run() funzione. |
La run() funzione riceve tre argomenti:
-
config: dizionario dei valori di configurazione impostati dall'utente nell'interfaccia utente. -
inputs: dizionario che esegue il mapping dei nomi delle porte di input ai dataframe. -
spark: sparkSession attiva.
La funzione deve restituire un dizionario che esegue il mapping dei nomi delle porte di output ai dataframe. Le chiavi devono corrispondere esattamente al name campo di ogni porta di output definita in ports.output. Ad esempio, con una porta di output denominata out:
return {"out": result_df}
Con più porte di output:
return {"match": match_df, "rest": rest_df}
environment
La proprietà
environment:
environment_version: '4'
dependencies:
- 'scikit-learn>=1.3'
- 'pandas>=2.0'
| Proprietà | Tipo | Obbligatorio | Description |
|---|---|---|---|
environment_version |
string | No | Versione dell'ambiente da usare. Ad esempio: "4". |
dependencies |
matrice di stringhe | No | Elenco di identificatori di dipendenza pip. Ogni voce segue la sintassi pip standard (ad esempio, "pandas>=2.0"). |
Esempi completi
Funzione definita dall'utente basata su UC
Questo esempio definisce un operatore UDF basato su Unity catalog che calcola l'interesse composto.
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 operatore run-function
Questo esempio definisce un python-run-function operatore che segmenta i clienti usando il clustering K-Means.
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'
Riferimento rapido
Proprietà radice obbligatorie
-
schema:user-defined-operator-v0.1.0 -
name: nome visualizzato -
id: identificatore univoco -
description: operazioni dell'operatore -
config: oggetto Schema JSON -
type:uc-udf,uc-udtfopython-run-function -
version: stringa di versione definita dall'autore
Proprietà radice facoltative
-
ports: definizioni di porta di input e output -
run_function: codice Python inline (solopython-run-function) -
environment: Python ambiente e dipendenze (solopython-run-function)
Tipi di dati delle proprietà config
string | boolean | number | integer | array | object
Widget dell'interfaccia utente
input | textarea | checkbox | toggle | number | slider | select | multi-select | expression
Origini opzioni
static (valori fissi) | inputColumns (dalla porta di input)
Formattare i valori
expression | table_source | file_source | column_expressions | sort_expressions | aggregation_expressions | ai_function_expressions | is_preview | string[]