Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les opérateurs définis par l’utilisateur dans Lakeflow Designer sont définis dans YAML. Tous les types d’opérateurs (uc-udf, uc-udtfet python-run-function) utilisent le user-defined-operator-v0.1.0 schéma, qui définit les champs de configuration à l’aide du format de schéma JSON.
Pour plus d’informations sur la création d’opérateurs définis par l’utilisateur, consultez Les opérateurs définis par l’utilisateur dans Lakeflow Designer.
Propriétés racines
Chaque fichier YAML d’opérateur commence par un ensemble de propriétés racine qui identifient l’opérateur et définissent son comportement. L’exemple suivant montre la structure générale :
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'
| Propriété | Catégorie | Obligatoire | Description |
|---|---|---|---|
schema |
string | Yes | Identificateur de schéma. Doit être user-defined-operator-v0.1.0. |
type |
string | Yes | Type d’opérateur : uc-udf, uc-udtfou python-run-function. |
name |
string | Yes | Nom complet de l’opérateur. Faites-le court pour ajuster l’interface utilisateur du Concepteur Lakeflow. Longueur minimale de 1 caractère. |
id |
string | Yes | Identificateur unique pour le type d’opérateur. Longueur minimale de 1 caractère. Envisagez d’utiliser des espaces de noms (tels que finance. ou ml.) pour catégoriser les opérateurs. |
description |
string | Yes | Description détaillée de ce que fait l’opérateur. Montré aux utilisateurs dans l’interface utilisateur. Utilisez la syntaxe multiligne YAML (>) pour des descriptions plus longues. |
config |
Objet | Yes | Objet de schéma JSON qui définit les champs de configuration. Voir Configuration. |
ports |
Objet | Non | Définitions de port d’entrée et de sortie. Voir Ports. |
version |
string | Yes | Chaîne de version (par exemple, "1.0.0"). Utilisez cette option pour suivre vos propres versions d’opérateur. |
run_function |
Objet | Non | Code Python inline pour les opérateurs python-run-function. Voir run_function. |
environment |
Objet | Non | Python configuration de l’environnement, y compris les dépendances. Voir environment. |
Ports
Les ports définissent la façon dont votre opérateur se connecte à d’autres opérateurs dans le pipeline. L’objet ports contient input et output tableaux.
ports:
input:
- name: input_data
title: Input Data
mime: application/vnd.databricks.dataframe
allowMultiple: true
required: true
output:
- name: out
title: Output
| Propriété | Catégorie | Obligatoire | Description |
|---|---|---|---|
name |
string | Yes | Identificateur unique pour le port. Utilisé dans les connexions et les références de configuration. |
title |
string | Non | Étiquette lisible par l’homme affichée dans l’interface utilisateur. |
mime |
string | Non | Type MIME pour les données de port. Par exemple : application/vnd.databricks.dataframe. |
allowMultiple |
booléen | Non | Si true, le port accepte plusieurs connexions entrantes.
falsePar défaut, où le port accepte une connexion unique et le câblage d’une nouvelle source remplace celui existant. |
required |
booléen | Non | Si false, le port est facultatif. Valeur par défaut : true. |
Seules les propriétés de port documentées sont acceptées. Les clés inconnues (telles que le champ hérité label ) sont rejetées par la validation du schéma.
Exemples de ports
UDF avec ports d’entrée et de sortie :
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
UDTF avec des ports d’entrée et de sortie :
ports:
input:
- name: input_data
title: Input Data
output:
- name: clustered_data
title: Clustered Results
python-run-function avec plusieurs entrées et un port facultatif :
ports:
input:
- name: main_data
title: Main Data
- name: reference_data
title: Reference Table
required: false
output:
- name: joined_output
title: Joined Output
Config
Le config champ est un objet json Schema. Vous définissez chaque champ de configuration en tant que propriété dans le schéma. Ce format vous donne accès aux fonctionnalités de validation de schéma JSON standard telles que enum, , minimummaximumet examples.
L’objet config doit avoir type: object et une properties carte. Vous pouvez éventuellement inclure required (tableau de noms de propriétés requis) et 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
Champs de propriété config
Chaque propriété de l’objet config.properties prend en charge les champs de schéma JSON standard suivants :
| Champ | Catégorie | Description |
|---|---|---|
type |
string | Type de données : string, , numberinteger, boolean, arrayou object. |
title |
string | Étiquette lisible par l’homme affichée dans l’interface utilisateur. |
description |
string | Texte d’aide affiché aux utilisateurs. |
default |
n'importe quel | Valeur par défaut du champ. |
examples |
tableau | Exemples de valeurs pour le champ. |
enum |
tableau | Correction de la liste des valeurs autorisées. |
format |
string | Indicateur de type sémantique. Consultez Les valeurs format. |
minimum |
number | Valeur minimale autorisée (pour number et integer types). |
maximum |
number | Valeur maximale autorisée (pour number et integer types). |
items |
Objet | Schéma pour les éléments de tableau (quand type est array). |
properties |
Objet | Définitions de propriétés imbriquées (quand type est object). |
required |
tableau | Liste des noms de propriétés imbriquées obligatoires (quand type est object). |
D’autres champs de schéma JSON standard tels que minLength, maxLength, patternet const sont également pris en charge.
Mettre en forme les valeurs
Le format champ d’une propriété de configuration fournit un indicateur de type sémantique qui indique au Concepteur Lakeflow comment interpréter la valeur. Ces indicateurs permettent un comportement et une validation spécialisés de l’interface utilisateur.
| Format | Description |
|---|---|
expression |
Référence de colonne ou expression SQL. |
table_source |
Référence de la source de table. |
file_source |
Référence de source de fichier. |
column_expressions |
Expressions de colonne. |
sort_expressions |
Trier les expressions. |
aggregation_expressions |
Expressions d’agrégation. |
ai_function_expressions |
Expressions de fonction IA. |
is_preview |
Indicateur de mode d’aperçu automatique. Lakeflow Designer définit cette valeur true pendant la préversion du flux de travail. Le nom de la propriété config est arbitraire ; seule la format: is_preview balise est importante. Utilisez cette option pour ignorer les effets secondaires tels que les appels d’API externes pendant la préversion. |
string[] |
Tableau de chaînes. |
Widgets d’interface utilisateur
Les widgets personnalisent le rendu d’un champ de configuration dans l’interface du Concepteur Lakeflow. Définissez des widgets dans la x-ui propriété sur chaque propriété de configuration. Si vous omettez le widget, Lakeflow Designer utilise un widget par défaut basé sur le type de données.
| Widget | Type de données | Description |
|---|---|---|
input |
string | Entrée de texte à ligne unique. |
textarea |
string | Zone de texte à plusieurs lignes. Prend en charge la propriété facultative rows . |
checkbox |
booléen | Case à cocher standard. |
toggle |
booléen | Basculez le commutateur. |
number |
nombre/entier | Entrée numérique avec contraintes facultatives. |
slider |
nombre/entier | Curseur visuel pour les plages numériques. Prend en charge la propriété facultative step . |
select |
string | Liste déroulante sélection unique. Exige optionsSource. |
multi-select |
tableau | Liste déroulante à sélection multiple. Exige optionsSource. |
expression |
string | Sélecteur de colonne/expression. Exige port. |
input
Champ d’entrée de texte à ligne unique.
api_endpoint:
type: string
title: API Endpoint
x-ui:
widget: input
textarea
Zone de texte à plusieurs lignes pour un contenu plus long. Prend en charge une propriété facultative rows pour contrôler la hauteur.
message_body:
type: string
title: Message Body
x-ui:
widget: textarea
rows: 4
checkbox
Case à cocher standard pour les valeurs booléennes.
send_notification:
type: boolean
title: Send Notification
default: false
x-ui:
widget: checkbox
toggle
Basculez le commutateur pour les valeurs booléennes.
enable_logging:
type: boolean
title: Enable Logging
default: true
x-ui:
widget: toggle
number
Champ d’entrée numérique. Utilisez minimum et maximum sur la propriété elle-même pour limiter la plage.
num_clusters:
type: number
title: Number of Clusters
default: 3
minimum: 1
maximum: 100
x-ui:
widget: number
slider
Curseur visuel pour sélectionner des valeurs numériques dans une plage. Utilisez minimum et maximum sur la propriété pour définir la plage, puis stepx-ui pour contrôler l’incrément.
confidence_threshold:
type: number
title: Confidence Threshold
default: 0.8
minimum: 0
maximum: 1
x-ui:
widget: slider
step: 0.05
select
Liste déroulante sélection unique. Nécessite une optionsSource définition de l’emplacement d’où proviennent les valeurs de liste déroulante. Consultez les sources d’options.
aggregation_type:
type: string
title: Aggregation Type
x-ui:
widget: select
optionsSource:
type: static
values: ['sum', 'avg', 'min', 'max', 'count']
multi-select
Liste déroulante à sélection multiple pour choisir plusieurs valeurs. Utilisez-la type: arrayitems: { type: string } sur la propriété. Nécessite un optionsSource. Consultez les sources d’options.
feature_columns:
type: array
title: Feature Columns
items:
type: string
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: input_data
expression
Sélecteur de colonne/expression qui permet aux utilisateurs de choisir une colonne à partir de données d’entrée ou d’écrire une expression SQL personnalisée. Définissez format: expression sur la propriété et spécifiez l’entrée port dans x-ui. Cela est utile :
- Lorsque l’utilisateur doit sélectionner une colonne dans les données d’entrée.
- Lorsque l’utilisateur peut vouloir écrire une expression SQL personnalisée.
- Pour les paramètres qui référencent des données dynamiques dans le pipeline.
amount:
type: string
title: Amount
format: expression
x-ui:
widget: expression
port: input_data
Sources d’options
Pour select et multi-select les widgets, vous devez définir l’emplacement d’utilisation optionsSourcedes options de liste déroulante . Il existe deux sources : static (une liste fixe définie dans le YAML) et inputColumns (noms de colonnes à partir d’un port d’entrée).
Options statiques
Liste fixe de valeurs définies dans yaML.
optionsSource:
type: static
values: ['option1', 'option2', 'option3']
| Propriété | Catégorie | Obligatoire | Description |
|---|---|---|---|
type |
string | Yes | Doit être static. |
values |
tableau | Yes | Tableau de valeurs de chaîne pour la liste déroulante. |
Colonnes d’entrée
Remplit dynamiquement la liste déroulante avec des noms de colonnes à partir d’un port d’entrée.
optionsSource:
type: inputColumns
port: input_data
| Propriété | Catégorie | Obligatoire | Description |
|---|---|---|---|
type |
string | Yes | Doit être inputColumns. |
port |
string | Yes | Nom du port d’entrée à partir duquel obtenir les noms de colonnes. Doit correspondre à name l’un de vos ports d’entrée définis. |
run_function
La propriété run_function vous permet d’incorporer du code Python directement dans la configuration YAML pour les opérateurs python-run-function. Cela élimine la nécessité d’inscrire une fonction de catalogue Unity distincte.
run_function:
type: inline
code: |
def run(config, inputs, spark):
df = inputs["data"]
threshold = config["threshold"]
return {"out": df.filter(df["score"] > threshold)}
| Propriété | Catégorie | Obligatoire | Description |
|---|---|---|---|
type |
string | Yes | Doit être inline. |
code |
string | Yes | Python code source. Doit définir une run() fonction. |
La run() fonction reçoit trois arguments :
-
config: dictionnaire de valeurs de configuration définies par l’utilisateur dans l’interface utilisateur. -
inputs: dictionnaire mappant les noms de ports d’entrée aux DataFrames. -
spark: La SparkSession active.
La fonction doit retourner un nom de port de sortie de mappage de dictionnaire aux DataFrames. Les clés doivent correspondre exactement au name champ de chaque port de sortie défini dans ports.output. Par exemple, avec un port de sortie nommé out:
return {"out": result_df}
Avec plusieurs ports de sortie :
return {"match": match_df, "rest": rest_df}
environment
La propriété environment spécifie l’environnement Python pour les opérateurs python-run-function. Utilisez-la pour épingler la version de l’environnement et déclarer des dépendances pip.
environment:
environment_version: '4'
dependencies:
- 'scikit-learn>=1.3'
- 'pandas>=2.0'
| Propriété | Catégorie | Obligatoire | Description |
|---|---|---|---|
environment_version |
string | Non | La version de l’environnement serverless, qui définit le runtime de base Python et les bibliothèques préinstallées. Pour les versions disponibles, voir Versions de l’environnement. Par exemple : "4". |
dependencies |
tableau de chaînes de caractères | Non | Liste des spécificateurs de dépendance pip. Chaque entrée suit la syntaxe pip standard (par exemple). "pandas>=2.0" |
Exemples complets
UDF basée sur l’UC
Cet exemple définit un opérateur UDF basé sur le catalogue Unity qui calcule l’intérêt composé.
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 opérateur de fonction d’exécution
Cet exemple définit un python-run-function opérateur qui segmente les clients à l’aide du clustering K-Moyennes.
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'
Référence rapide
Propriétés racine requises
-
schema:user-defined-operator-v0.1.0 -
name: Nom d’affichage -
id: identificateur unique -
description: Que fait l’opérateur -
config: objet Schéma JSON -
type:uc-udf, ouuc-udtfpython-run-function -
version: chaîne de version définie par l’auteur
Propriétés racine facultatives
-
ports: définitions de port d’entrée et de sortie -
run_function: code de Python inline (python-run-functionuniquement) -
environment: environnement et dépendances Python (python-run-functionuniquement)
Types de données de propriété config
string | boolean | number | integer | array | object
Widgets d’interface utilisateur
input | textarea | checkbox | toggle | number | slider | select | multi-select | expression
Sources d’options
static (valeurs fixes) | inputColumns (à partir du port d’entrée)
Mettre en forme les valeurs
expression | table_source | file_source | column_expressions | sort_expressions | aggregation_expressions | ai_function_expressions | is_preview | string[]