Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os operadores definidos pelo utilizador no Lakeflow Designer são definidos no YAML. Todos os tipos de operadores (uc-udf, , e uc-udtf) utilizam o python-run-function esquema, que define campos de configuração usando o formato user-defined-operator-v0.1.0JSON Schema.
Para informações sobre como construir operadores definidos pelo utilizador, veja Operadores definidos pelo utilizador no Lakeflow Designer.
Propriedades da raiz
Cada ficheiro YAML de operador começa com um conjunto de propriedades raiz que identificam o operador e definem o seu comportamento. O exemplo seguinte mostra a estrutura geral:
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'
| Propriedade | Tipo | Required | Description |
|---|---|---|---|
schema |
cadeia (de caracteres) | Yes | Identificador de esquema. Deve ser user-defined-operator-v0.1.0. |
type |
cadeia (de caracteres) | Yes | Tipo de operador: uc-udf, uc-udtf, ou python-run-function. |
name |
cadeia (de caracteres) | Yes | Nome de exibição para o operador. Mantém-na curta para se ajustar à interface do Lakeflow Designer. Comprimento mínimo de 1 personagem. |
id |
cadeia (de caracteres) | Yes | Identificador único para o tipo de operador. Comprimento mínimo de 1 personagem. Considere usar namespaces (como finance. ou ml.) para categorizar operadores. |
description |
cadeia (de caracteres) | Yes | Descrição detalhada do que o operador faz. Mostrado aos utilizadores na interface. Use a sintaxe multi-linha YAML (>) para descrições mais longas. |
config |
objecto | Yes | Objeto de esquema JSON que define campos de configuração. Ver Configuração. |
ports |
objecto | No | Definições das portas de entrada e saída. Veja Portos. |
version |
cadeia (de caracteres) | Yes | Cadeia de versões (por exemplo, "1.0.0"). Use isto para acompanhar as suas próprias libertações de operadores. |
run_function |
objecto | No | Código de Python em linha para operadores python-run-function. Consulte run_function. |
environment |
objecto | No | Configuração do ambiente Python, incluindo dependências. Consulte environment. |
Portas
As portas definem como o seu operador se liga a outros operadores no pipeline. O ports objeto contém input e output agrupa-se.
ports:
input:
- name: input_data
title: Input Data
mime: application/vnd.databricks.dataframe
allowMultiple: true
required: true
output:
- name: out
title: Output
| Propriedade | Tipo | Required | Description |
|---|---|---|---|
name |
cadeia (de caracteres) | Yes | Identificador único para a porta. Usado em ligações e referências de configuração. |
title |
cadeia (de caracteres) | No | Etiqueta legível por humanos exibida na interface. |
mime |
cadeia (de caracteres) | No | Tipo MIME para os dados da porta. Por exemplo, application/vnd.databricks.dataframe. |
allowMultiple |
boolean | No | Se true, a porta aceita múltiplas ligações de entrada. Por defeito é false, onde a porta aceita uma única ligação e a ligação a uma nova fonte substitui a existente. |
required |
boolean | No | Se false, a porta é opcional. Padrão: true. |
Apenas as propriedades de porta documentadas são aceites. Chaves desconhecidas (como o campo legado label ) são rejeitadas pela validação do esquema.
Exemplos de portas
UDF com portas de entrada e saída:
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
UDTF com portas de entrada e saída:
ports:
input:
- name: input_data
title: Input Data
output:
- name: clustered_data
title: Clustered Results
python-run-function com múltiplas entradas e uma porta opcional:
ports:
input:
- name: main_data
title: Main Data
- name: reference_data
title: Reference Table
required: false
output:
- name: joined_output
title: Joined Output
Configuração
O config campo é um objeto de esquema JSON. Defines cada campo de configuração como uma propriedade dentro do esquema. Este formato dá-lhe acesso a funcionalidades padrão de validação de esquemas JSON como enum, minimum, maximum, e examples.
O config objeto deve ter type: object um mapa properties . Pode opcionalmente incluir required (um conjunto de nomes de propriedades obrigatórios) 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
Campos de propriedades de configuração
Cada propriedade no config.properties objeto suporta os seguintes campos padrão do Esquema JSON:
| Campo | Tipo | Description |
|---|---|---|
type |
cadeia (de caracteres) | Tipo de dados: string, number, integer, boolean, array, ou object. |
title |
cadeia (de caracteres) | Etiqueta legível por humanos exibida na interface. |
description |
cadeia (de caracteres) | Texto de ajuda mostrado aos utilizadores. |
default |
any | Valor padrão para o campo. |
examples |
matriz | Exemplos de valores para o campo. |
enum |
matriz | Lista fixa de valores permitidos. |
format |
cadeia (de caracteres) | Dica semântica. Ver Valores de formato. |
minimum |
number | Valor mínimo permitido (para number e integer tipos). |
maximum |
number | Valor máximo permitido (para number e integer tipos). |
items |
objecto | Esquema para elementos de array (quando type é array). |
properties |
objecto | Definições de propriedades aninhadas (quando type é object). |
required |
matriz | Lista de nomes obrigatórios de propriedades aninhadas (quando type é object). |
Outros campos padrão do Esquema JSON, como minLength, maxLength, pattern, e const também são suportados.
Formatar valores
O format campo numa propriedade config fornece uma dica semântica que indica ao Lakeflow Designer como interpretar o valor. Estas dicas permitem um comportamento e validação especializados da interface.
| Formato | Description |
|---|---|
expression |
Referência de coluna ou expressão SQL. |
table_source |
Referência da fonte da tabela. |
file_source |
Fonte do ficheiro. |
column_expressions |
Expressões em coluna. |
sort_expressions |
Ordenar expressões. |
aggregation_expressions |
Expressões de agregação. |
ai_function_expressions |
Expressões de funções de IA. |
is_preview |
Sinal de modo de pré-visualização automática. O Lakeflow Designer define isto para true durante a pré-visualização do fluxo de trabalho. O nome da propriedade de configuração é arbitrário; Só a format: is_preview etiqueta importa. Usa isto para evitar efeitos secundários como chamadas de API externas durante a pré-visualização. |
string[] |
Matriz de cordas. |
Widgets de interface
Os widgets personalizam a forma como um campo de configuração é renderizado na interface do Lakeflow Designer. Defina widgets na x-ui propriedade de cada propriedade de configuração. Se omitir o widget, o Lakeflow Designer usa um widget predefinido baseado no tipo de dado.
| Widget | Tipo de dados | Description |
|---|---|---|
input |
cadeia (de caracteres) | Entrada de texto de linha única. |
textarea |
cadeia (de caracteres) | Área de texto multi-linha. Suporta propriedade opcional rows . |
checkbox |
boolean | Caixa de seleção padrão. |
toggle |
boolean | Interruptor de alavanca. |
number |
Número/Inteiro | Entrada numérica com restrições opcionais. |
slider |
Número/Inteiro | Deslizador visual para intervalos numéricos. Suporta propriedade opcional step . |
select |
cadeia (de caracteres) | Menu suspenso de seleção simples. Requer optionsSource. |
multi-select |
matriz | Menu suspenso de seleção múltipla. Requer optionsSource. |
expression |
cadeia (de caracteres) | Seletor de coluna/expressão. Requer port. |
input
Campo de introdução de texto de linha única.
api_endpoint:
type: string
title: API Endpoint
x-ui:
widget: input
textarea
Área de texto multi-linha para conteúdo mais longo. Suporta uma propriedade opcional rows para controlar a altura.
message_body:
type: string
title: Message Body
x-ui:
widget: textarea
rows: 4
checkbox
Caixa de seleção padrão para valores booleanos.
send_notification:
type: boolean
title: Send Notification
default: false
x-ui:
widget: checkbox
toggle
Interruptor de alternância para valores booleanos.
enable_logging:
type: boolean
title: Enable Logging
default: true
x-ui:
widget: toggle
number
Campo de entrada numérica. Use minimum e maximum na própria propriedade para restringir o alcance.
num_clusters:
type: number
title: Number of Clusters
default: 3
minimum: 1
maximum: 100
x-ui:
widget: number
slider
Deslizador visual para selecionar valores numéricos dentro de um intervalo. Use minimum e maximum na propriedade para definir o intervalo, e step em x-ui para controlar o incremento.
confidence_threshold:
type: number
title: Confidence Threshold
default: 0.8
minimum: 0
maximum: 1
x-ui:
widget: slider
step: 0.05
select
Menu suspenso de seleção simples. Requer um optionsSource para definir de onde vêm os valores do menu suspenso.
Consulte as fontes de Opções.
aggregation_type:
type: string
title: Aggregation Type
x-ui:
widget: select
optionsSource:
type: static
values: ['sum', 'avg', 'min', 'max', 'count']
multi-select
Selecione múltiplos os menus suspensos para escolher vários valores. Use type: array na items: { type: string } propriedade. Requer um optionsSource.
Consulte as fontes de Opções.
feature_columns:
type: array
title: Feature Columns
items:
type: string
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: input_data
expression
Seletor de colunas/expressões que permite aos utilizadores escolher uma coluna a partir dos dados de entrada ou escrever uma expressão SQL personalizada. Defina format: expression na propriedade e especifique a entrada port em x-ui. Isto é útil:
- Quando o utilizador deve selecionar uma coluna dos dados de entrada.
- Quando o utilizador pode querer escrever uma expressão SQL personalizada.
- Para parâmetros que referenciam dados dinâmicos no pipeline.
amount:
type: string
title: Amount
format: expression
x-ui:
widget: expression
port: input_data
Fontes de opções
Para select widgets e multi-select , deve definir de onde vêm as opções suspensas usando optionsSource. Existem duas fontes: static (uma lista fixa definida no YAML) e inputColumns (nomes das colunas a partir de uma porta de entrada).
Opções estáticas
Uma lista fixa de valores definidos no YAML.
optionsSource:
type: static
values: ['option1', 'option2', 'option3']
| Propriedade | Tipo | Required | Description |
|---|---|---|---|
type |
cadeia (de caracteres) | Yes | Deve ser static. |
values |
matriz | Yes | Array de valores de string para o menu suspenso. |
Colunas de entrada
Preenche dinamicamente o menu suspenso com os nomes das colunas a partir de uma porta de entrada.
optionsSource:
type: inputColumns
port: input_data
| Propriedade | Tipo | Required | Description |
|---|---|---|---|
type |
cadeia (de caracteres) | Yes | Deve ser inputColumns. |
port |
cadeia (de caracteres) | Yes | Nome da porta de entrada de onde se obtêm os nomes das colunas. Deve corresponder ao name de uma das portas de entrada definidas. |
run_function
A propriedade run_function permite incorporar código Python diretamente na configuração YAML para operadores python-run-function. Isto elimina a necessidade de registar uma função separada do Unity Catalog.
run_function:
type: inline
code: |
def run(config, inputs, spark):
df = inputs["data"]
threshold = config["threshold"]
return {"out": df.filter(df["score"] > threshold)}
| Propriedade | Tipo | Required | Description |
|---|---|---|---|
type |
cadeia (de caracteres) | Yes | Deve ser inline. |
code |
cadeia (de caracteres) | Yes | Código-fonte em Python. Deve definir uma run() função. |
A run() função recebe três argumentos:
-
config: Um dicionário de valores de configuração definidos pelo utilizador na interface. -
inputs: Um dicionário que mapeia nomes de portas de entrada para DataFrames. -
spark: A SparkSession ativa.
A função deve devolver um dicionário, mapeando nomes das portas de saída para DataFrames. As chaves devem corresponder exatamente ao name campo de cada porta de saída definida em ports.output. Por exemplo, com uma porta de saída chamada out:
return {"out": result_df}
Com múltiplas portas de saída:
return {"match": match_df, "rest": rest_df}
environment
A propriedade environment especifica o ambiente Python para operadores python-run-function. Usa-o para fixar a versão do ambiente e declarar dependências de pips.
environment:
environment_version: '4'
dependencies:
- 'scikit-learn>=1.3'
- 'pandas>=2.0'
| Propriedade | Tipo | Required | Description |
|---|---|---|---|
environment_version |
cadeia (de caracteres) | No | A versão do ambiente serverless, que define o runtime base em Python e as bibliotecas pré-instaladas. Para as versões disponíveis, veja Versões de Ambiente. Por exemplo, "4". |
dependencies |
matriz de strings | No | Lista de especificadores de dependência de pips. Cada entrada segue a sintaxe padrão dos pips (por exemplo, "pandas>=2.0"). |
Exemplos completos
UDF sediada na UC
Este exemplo define um operador UDF baseado no Unity Catalog que calcula o juro 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
Operador de run-function em Python
Este exemplo define um python-run-function operador que segmenta clientes usando 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'
Referência rápida
Propriedades da raiz obrigatórias
-
schema:user-defined-operator-v0.1.0 -
name: Nome de exibição -
id: Identificador único -
description: O que o operador faz -
config: Objeto de esquema JSON -
type:uc-udf,uc-udtf, oupython-run-function -
version: Cadeia de versões definida pelo autor
Propriedades de raiz opcionais
-
ports: Definições das portas de entrada e saída : Código de Python inline ( ) : Ambiente Python e dependências ( )
Tipos de dados de propriedades de configuração
string | boolean | number | integer | array | object
Widgets de interface
input | textarea | checkbox | toggle | number | slider | select | multi-select | expression
Fontes de opções
static (valores fixos) | inputColumns (da porta de entrada)
Formatar valores
expression | table_source | file_source | column_expressions | sort_expressions | aggregation_expressions | ai_function_expressions | is_preview | string[]