Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met Lakeflow Designer kunt u door de gebruiker gedefinieerde operators maken die rechtstreeks in het canvas naast ingebouwde operators worden weergegeven. Gebruik deze om Lakeflow Designer uit te breiden met uw eigen bedrijfslogica, berekeningen of integraties.
Er zijn drie typen door de gebruiker gedefinieerde operators:
-
python-run-function: een zelfstandig YAML-bestand met inline-Python opgeslagen in de werkruimte. Het meest geschikt voor transformaties op DataFrame-niveau en externe integraties. Machtigingen worden beheerd op het niveau van het werkruimtebestand. -
uc-udf: Omsluit een scalaire functie van Unity Catalog. Het meest geschikt voor transformaties op kolomniveau. Toegang wordt beheerd door unity-catalogusmachtigingen. -
uc-udtf: Omsluit een tabelwaardefunctie van Unity Catalog. Het meest geschikt voor transformaties op tabelniveau, zoals ML-clustering en -aggregatie. Toegang wordt beheerd door unity-catalogusmachtigingen.
| Feature | python-run-function |
uc-udf |
uc-udtf |
|---|---|---|---|
| Voorbeeld van een toepassing | DataFrame-transformaties, API-integraties, e-mailmeldingen | Berekeningen op kolomniveau (BMI, rente) | ML-clustering, aggregatie tussen rijen |
| Invoer | Dataframes | Enkele waarden | Hele tabel, rij per rij |
| Uitvoer | Dataframes | Enkele waarde | Tabel (meerdere rijen) |
| Vereist Unity Catalog-functie | No | Yes | Yes |
| Toegangsbeheer | Machtigingen voor werkruimtebestanden | Machtigingen voor Unity Catalog (EXECUTE, USE SCHEMA) |
Machtigingen voor Unity Catalog (EXECUTE, USE SCHEMA) |
| Ondersteunde talen | Alleen Python | SQL of Python in een SQL-wrapper | SQL of Python in een SQL-wrapper |
Hoe door de gebruiker gedefinieerde operators werken
Een door de gebruiker gedefinieerde operator bestaat uit:
-
Operatorlogica: De code die wordt uitgevoerd wanneer de operator wordt uitgevoerd. Dit kan een inline Python
run()functie (voorpython-run-function) of een Unity Catalog-functie (vooruc-udfenuc-udtf). -
YAML-configuratie: Vertelt Lakeflow Designer hoe de operator in de gebruikersinterface kan worden weergegeven, waaronder de naam, beschrijving, invoerparameters, UI-widgets en poorten van de operator. Alle operatortypen maken gebruik van het
user-defined-operator-v0.1.0schema. -
Registratiebestand: een vermelding in
.user_defined_operators.yamlwaarmee Lakeflow Designer de operator kan vinden.
Operatorlogica
Python-run-functie voor door de gebruiker gedefinieerde operatorlogica
Elke python-run-function operator moet een run() functie definiëren:
def run(config: Dict[str, Any], inputs: Dict[str, Any], spark) -> Dict[str, Any]:
-
config: door de gebruiker geconfigureerde waarden uit de gebruikersinterface, gesleuteld op eigenschapsnaam. -
inputs: Invoerdataframes, gesleuteld door invoerpoortname. -
spark: De actieve SparkSession. -
Retourneert: Een woordenlijst die uitvoerpoortwaarden
nameaan DataFrames toetoewijzingt.
In het volgende voorbeeld worden rijen uit een invoerdataframe gefilterd:
def run(config, inputs, spark):
df = inputs["in"]
filtered = df.filter(config["filter_expression"])
return {"out": filtered}
Als uw operator externe PIP-pakketten vereist, voegt u het environment veld toe aan de YAML:
environment:
environment_version: '4'
dependencies:
- requests==2.31.0
- beautifulsoup4==4.12.0
Operatorlogica voor UDF en UDTF
U kunt UC-functies schrijven in SQL of Python. Python functies worden verpakt in een SQL CREATE FUNCTION-instructie:
SQL-functie:
CREATE OR REPLACE FUNCTION my_catalog.my_schema.calculate_bmi(weight_kg DOUBLE, height_m DOUBLE)
RETURNS DOUBLE
LANGUAGE SQL
RETURN
SELECT weight_kg / (height_m * height_m);
Python-functie (verpakt in SQL):
CREATE OR REPLACE FUNCTION my_catalog.my_schema.calculate_bmi(weight_kg DOUBLE, height_m DOUBLE)
RETURNS DOUBLE
LANGUAGE PYTHON
AS $$
return weight_kg / (height_m ** 2)
$$;
UDF's verwerken één waarde tegelijk en retourneren een berekende waarde. UDTF's verwerken tabellen rij voor rij en kunnen over alle rijen heen een toestand behouden. Gebruiken uc-udf voor transformaties op kolomniveau en uc-udtf voor bewerkingen zoals ML-clustering of aggregatie.
Daarnaast moet u voor UDTF's drie belangrijke methoden definiëren: __init__(), eval() en terminate():
class MyOperator:
def __init__(self):
# Called before processing - initialize any values needed.
def eval(self, row, id_column, columns, k):
# Called one time per input row - accumulate data here.
def terminate(self):
# Called after all rows - perform final calculations and yield results.
Note
UDTF-retourtabellen moeten vaste, expliciete typen hebben. U kunt niet verwijzen naar invoerkolomtypen in de retourconfiguratie.
YAML-configuratie
De YAML-configuratie vertelt Lakeflow Designer hoe de operator in de gebruikersinterface kan worden weergegeven. Hiermee definieert u de naam, beschrijving, invoerparameters, UI-widgets en poorten van de operator. Elk configuratieveld is een eigenschap met een type, titel en optionele x-ui widgethints:
config:
type: object
properties:
my_param:
type: string
title: My Parameter
x-ui:
widget: input
my_expression:
type: string
title: Column
format: expression
x-ui:
widget: expression
port: in
my_number:
type: number
title: Count
default: 10
minimum: 0
maximum: 100
required:
- my_param
- my_expression
Zie de YAML-referentie voor door de gebruiker gedefinieerde operator voor meer informatie over het YAML-schema, inclusief alle widgettypen en configuratieopties.
Ports
Poorten definiëren de invoer en uitvoer voor uw operator:
ports:
input:
- name: in
title: Input Data
mime: application/vnd.databricks.dataframe
required: true
allowMultiple: false
output:
- name: out
title: Output Data
YAML voor Python functieoperators uitvoeren
Voor python-run-function-operators is het YAML-bestand zelfstandig en bevat het veld run_function met inline-Python-code:
schema: user-defined-operator-v0.1.0
type: python-run-function
name: Filter Rows
id: filter_rows
version: '1.0.0'
description: Filters rows based on a SQL expression.
config:
type: object
properties:
filter_expression:
type: string
title: Filter Expression
x-ui:
widget: input
required:
- filter_expression
ports:
input:
- name: in
title: Input
output:
- name: out
title: Output
run_function:
type: inline
code: |
def run(config, inputs, spark):
df = inputs["in"]
filtered = df.filter(config["filter_expression"])
return {"out": filtered}
YAML voor Unity Catalog-functies
Sluit voor UC-operators de YAML-configuratie in als opmerking of docstring in uw functie.
In SQL (gebruik /* ... */ opmerking):
RETURN(/*
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Calculate BMI
id: calculate_bmi
version: "1.0.0"
description: Calculates BMI from weight and height.
config:
type: object
properties:
weight_kg:
type: string
title: Weight (in kg)
format: expression
x-ui:
widget: expression
port: in
height_m:
type: string
title: Height (in meters)
format: expression
x-ui:
widget: expression
port: in
required:
- weight_kg
- height_m
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
*/
SELECT weight_kg / (height_m * height_m)
);
In Python (gebruik """ ... """ docstring):
AS $$
"""
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Calculate BMI
id: calculate_bmi
version: "1.0.0"
description: Calculates BMI from weight and height.
config:
type: object
properties:
weight_kg:
type: string
title: Weight (in kg)
format: expression
x-ui:
widget: expression
port: in
height_m:
type: string
title: Height (in meters)
format: expression
x-ui:
widget: expression
port: in
required:
- weight_kg
- height_m
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
"""
return weight_kg / (height_m ** 2)
$$;
Uw operator registreren en uitrollen in Lakeflow Designer
Registreer je operator in een .user_defined_operators.yaml-bestand zodat deze in Lakeflow Designer wordt weergegeven:
- Werkruimteniveau: Plaats het bestand in de hoofdmap van uw werkruimte om de operator zichtbaar te maken voor alle gebruikers.
-
Gebruikersniveau: Plaats het bestand in de basismap van de gebruiker (
/Workspace/Users/<user-name>/.user_defined_operators.yaml) om operators alleen zichtbaar te maken voor u.
De operators: sectie ondersteunt bestandspaden, functieverwijzingen van Unity Catalog en glob-patronen. U kunt invoertypen combineren:
operators:
# File path (python-run-function operators)
- /Workspace/Users/me/udos/my_operator.yaml
# Glob pattern (registers all matching files)
- /Workspace/Users/me/udos/transforms/*.yaml
# UC function reference (uc-udf and uc-udtf operators)
- catalog: my_catalog
schema: my_schema
functionName: my_function
Een operator bijwerken of verwijderen
Wanneer u de code van een operator wijzigt, vernieuwt u de door de gebruiker gedefinieerde operators om de wijziging te laden. Klik op het tabblad Operators van het menu op .
- Als de operator hetzelfde
versionbehoudt, wordt bij het vernieuwen de bijgewerkte code geladen. - Als de operator een nieuwe versie van
versionheeft, vraagt de operator op het canvas u na het vernieuwen om hiernaar te upgraden (of de huidige versie te behouden).
Als u een operator uit Lakeflow Designer wilt verwijderen, verwijdert u de vermelding uit .user_defined_operators.yaml. Voor de uc-udf- en uc-udtf-operators kunt u de onderliggende Unity Catalog-functie ook met DROP FUNCTION laten vallen als u die niet langer nodig hebt.
Geavanceerde configuraties
Preview-modus
Lakeflow Designer ondersteunt previews in de ontwerpmodus. Voor operators die externe API's aanroepen of schrijven naar externe systemen, voegt u een is_preview configuratie-eigenschap toe, zodat u neveneffecten tijdens de preview-versie kunt overslaan. Wanneer de preview-modus is ingeschakeld, moeten gebruikers expliciet op Uitvoeren klikken om de operator met bijwerkingen uit te voeren.
config:
type: object
properties:
is_preview:
type: boolean
format: is_preview
default: false
Lakeflow Designer stelt deze waarde true automatisch in op tijdens de preview. Vink dit in uw logica aan om neveneffecten over te slaan:
# In a python-run-function
if config.get("is_preview"):
return {"out": inputs["in"]}
# In a UC function (SQL)
CASE WHEN is_preview THEN 'preview' ELSE /* actual work */ END
Unity Catalog-verbindingen
Voor OP UC gebaseerde SQL-operators die externe API's aanroepen, gebruikt u HTTP-verbindingen van Unity Catalog om veilig referenties op te slaan:
CREATE CONNECTION my_api_connection TYPE HTTP OPTIONS (
host 'https://api.example.com',
port '443',
base_path '/v1/',
bearer_token 'your-token-here'
);
Gebruik vervolgens de verbinding in uw SQL UDF met de http_request() functie. Zie Verbinding maken met externe HTTP-services voor meer informatie.
WorkspaceClient
Voor python-run-function-operators kunt u de Azure Databricks WorkspaceClient gebruiken voor toegang tot werkruimtebronnen en externe API's:
def run(config, inputs, spark):
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# Use w to access workspace resources
Een volledige door de gebruiker gedefinieerde python-run-function-operator maken
In de volgende stappen doorloopt u hoe u helemaal vanaf nul een python-run-function-operator maakt.
Stap 1: De logica definiëren
Schrijf uw run() functie in een notebook:
from typing import Dict, Any
def run(config: Dict[str, Any], inputs: Dict[str, Any], spark) -> Dict[str, Any]:
from pyspark.sql import functions as F
df = inputs["in"]
result = df.withColumn(config["column_name"], F.current_timestamp())
return {"out": result}
Stap 2: De functie testen
Test de functie interactief met voorbeeldgegevens:
test_df = spark.createDataFrame(
[("Alice", 100), ("Bob", 200)],
["name", "amount"]
)
result = run(
config={"column_name": "processed_at"},
inputs={"in": test_df},
spark=spark
)
result["out"].show()
Stap 3: de YAML-configuratie maken
Definieer de metagegevens van de operator, configuratievelden en poorten in een YAML-bestand:
schema: user-defined-operator-v0.1.0
type: python-run-function
name: Add Timestamp
id: transforms.add_timestamp
version: '1.0.0'
description: Adds a timestamp column to the input DataFrame.
config:
type: object
properties:
column_name:
type: string
title: Column Name
default: processed_at
x-ui:
widget: input
required:
- column_name
Stap 4: Logica en YAML combineren
Voeg de velden run_function en ports toe om het volledige YAML-bestand te maken. Sla deze op in uw werkruimte, bijvoorbeeld /Workspace/Users/<user-name>/udos/add_timestamp.yaml:
schema: user-defined-operator-v0.1.0
type: python-run-function
name: Add Timestamp
id: transforms.add_timestamp
version: '1.0.0'
description: Adds a timestamp column to the input DataFrame.
config:
type: object
properties:
column_name:
type: string
title: Column Name
default: processed_at
x-ui:
widget: input
required:
- column_name
ports:
input:
- name: in
title: Input
output:
- name: out
title: Output
run_function:
type: inline
code: |
from typing import Dict, Any
def run(config: Dict[str, Any], inputs: Dict[str, Any], spark) -> Dict[str, Any]:
from pyspark.sql import functions as F
df = inputs["in"]
result = df.withColumn(config["column_name"], F.current_timestamp())
return {"out": result}
Stap 5: De operator registreren
Voeg het bestandspad toe aan uw .user_defined_operators.yaml bestand:
operators:
- /Workspace/Users/<user-name>/udos/add_timestamp.yaml
Stap 6: De operator gebruiken in Lakeflow Designer
Open Lakeflow Designer en controleer of de operator wordt weergegeven in het operatorpalet. Sleep deze naar het canvas, verbind een invoer, configureer de kolomnaam en voer een voorbeeld uit.
Een volledige door de gebruiker gedefinieerde UC-operator maken
De volgende stappen begeleiden u bij het maken van een op UC gebaseerde uc-udf-operator.
Stap 1: De logica definiëren
Uw functielogica schrijven en testen in een notebook:
def double_value(input_value: float) -> float:
if input_value is None:
return None
return input_value * 2
Stap 2: de YAML-configuratie maken
Definieer de metagegevens van de operator, configuratievelden en poorten:
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Double Value
id: math.double_value
version: '1.0.0'
description: Doubles the input value
config:
type: object
properties:
input_value:
type: string
title: Input Value
format: expression
x-ui:
widget: expression
port: input_data
required:
- input_value
ports:
input:
- name: input_data
title: Input
output:
- name: out
title: Output
Stap 3: De logica en YAML combineren
Maak de Unity Catalog-functie met de YAML ingesloten als docstring:
CREATE OR REPLACE FUNCTION main.my_schema.double_value(input_value DOUBLE)
RETURNS DOUBLE
LANGUAGE PYTHON
AS $$
"""
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Double Value
id: math.double_value
version: "1.0.0"
description: Doubles the input value
config:
type: object
properties:
input_value:
type: string
title: Input Value
format: expression
x-ui:
widget: expression
port: input_data
required:
- input_value
ports:
input:
- name: input_data
title: Input
output:
- name: out
title: Output
"""
def double_value(input_value: float) -> float:
if input_value is None:
return None
return input_value * 2
return double_value(input_value)
$$
Stap 4: De functie testen
SELECT main.my_schema.double_value(5) AS result;
-- Should return: 10
Stap 5: De operator registreren
Voeg de Unity Catalog-functiereferentie toe aan uw .user_defined_operators.yaml-bestand:
operators:
- catalog: main
schema: my_schema
functionName: double_value
Stap 6: De operator gebruiken in Lakeflow Designer
Open Lakeflow Designer en controleer of de operator wordt weergegeven in het operatorpalet. Sleep het naar het canvas, verbind een invoer en voer een voorbeeld uit.
Troubleshooting
| Issue | Solution |
|---|---|
| De operator wordt niet weergegeven in Lakeflow Designer. | Controleer of deze .user_defined_operators.yaml bestaat en vermeldt uw functie of bestandspad. Voor python-run-function-operators: controleer het bestandspad en of het YAML-bestand toegankelijk is. |
| Schemavalidatie mislukt. | Controleer uw YAML op basis van het officiële schema op https://your-workspace.cloud.databricks.com/static/schemas/user-defined-operator-v0.1.0.json. |
| De machtiging is geweigerd. | Controleer voor op UC gebaseerde operators of gebruikers EXECUTE op de functie en USE SCHEMA op het schema hebben. Controleer voor python-run-function operators dat gebruikers leestoegang hebben tot het YAML-bestand. |
python-run-function de operator mislukt tijdens runtime. |
Controleer of de run() functiehandtekening overeenkomt def run(config, inputs, spark)met . Controleer of poortnamen in de code overeenkomen met de YAML en of de retourwoordenlijstsleutels overeenkomen met uitvoerpoortwaarden name . |
| UDTF retourneert verkeerde typen. | UDTF-retourtypen moeten expliciet zijn; u kunt niet verwijzen naar invoerkolomtypen. |
Permissions
| Toestemming | Purpose |
|---|---|
Leestoegang tot .user_defined_operators.yaml. |
Ontdek de operator. |
Leestoegang tot het YAML-bestand (python-run-function alleen). |
Laad de operatordefinitie. |
| EXECUTE op de Unity Catalog-functie (alleen op UC gebaseerde operators). | Voer de operator uit. |
| USE SCHEMA in het schema (alleen UC-gebaseerde operatoren). | Open het schema waarin de functie is gemaakt. |
| Andere machtigingen | Afhankelijk van uw operator hebben gebruikers mogelijk andere machtigingen nodig. Bijvoorbeeld USE CONNECTION op een Unity Catalog-verbinding voor HTTP-API-aanroepen. |
Aanvullende bronnen
Bekijk de volgende zelfstudies:
| Example | Typ | Description |
|---|---|---|
| Afzender van Gmail-e-mail | python-run-function |
DataFrame-gegevens verzenden als een CSV-e-mailbijlage via Gmail. |
| Rekenmachine voor samengestelde rente | uc-udf |
Bereken toekomstige investeringswaarden met behulp van de formule voor samengestelde rente. |
| K-means-clustering | uc-udtf |
Segmenteer gegevens in clusters met scikit-learn. |
| Slack-bericht verzenden | uc-udf |
Meldingen verzenden naar Slack-kanalen via API. |
| Alle UI-widgets | uc-udf |
Verwijzingsoperator die alle beschikbare UI-widgets weergeeft. |
Zie de YAML-verwijzing voor door de gebruiker gedefinieerde operatoren voor een volledige verwijzing naar het YAML-schema.