UDF-hulpprogramma's (NotebookUtils User Data Function) voor Fabric

De notebookutils.udf module biedt hulpprogramma's voor het integreren van notebookcode met UDF-items (User Data Function). U kunt functies openen vanuit een UDF-item binnen dezelfde werkruimte of in verschillende werkruimten en deze functies vervolgens indien nodig aanroepen. UDF-items bevorderen hergebruik van code, gecentraliseerd onderhoud en teamsamenwerking.

UDF-hulpprogramma's gebruiken om:

  • Functie ophalen : toegang tot functies van UDF-items op naam.
  • Toegang tussen werkruimten : gebruik functies van UDF-items in andere werkruimten.
  • Functiedetectie : controleer beschikbare functies en hun handtekeningen.
  • Flexibele aanroep : oproepfuncties met taal geschikte parameters.

Opmerking

U hebt leestoegang nodig tot een UDF-item in de doelwerkruimte om de functies op te halen. Uitzonderingen van UDF-functies worden doorgegeven aan het aanroepende notebook.

De volgende tabel bevat de beschikbare UDF-methoden:

Methode Signature Beschrijving
getFunctions getFunctions(udf: String, workspaceId: String = ""): UDF Hiermee worden alle functies opgehaald uit een UDF-item op artifact-ID of naam. Retourneert een object met aanroepbare functiekenmerken.

Het geretourneerde object bevat de volgende eigenschappen:

Vastgoed Typ Beschrijving
functionDetails List Een lijst met woordenlijsten voor functiemetagegevens. Elke woordenlijst bevat: Name (functienaam), Description (functiebeschrijving), Parameters (lijst met parameterdefinities), FunctionReturnType (retourtype) en DataSourceConnections (gebruikte gegevensbronverbindingen).
itemDetails Woordenlijst Een woordenlijst met metagegevens van UDF-items met sleutels: Id (artefact-id), Name (itemnaam), WorkspaceId (werkruimte-id) en CapacityId (capaciteits-id).
<functionName> Callable Elke functie in het UDF-item wordt een aanroepbare methode voor het geretourneerde object. Gebruik myFunctions.functionName(...) om aan te roepen.

Aanbeveling

Haal UDF-functies eenmaal op en sla het wrapper-object in de cache op. Vermijd herhaaldelijk aanroepen getFunctions() in een lus: sla het resultaat in de cache op om overhead te minimaliseren.

Functies ophalen uit een UDF

Hiermee notebookutils.udf.getFunctions() haalt u alle functies op uit een UDF-item. U kunt desgewenst een werkruimte-id opgeven voor toegang tussen werkruimten.

# Get functions from a UDF item in the current workspace
myFunctions = notebookutils.udf.getFunctions('UDFItemName')

# Get functions from a UDF item in another workspace
myFunctions = notebookutils.udf.getFunctions('UDFItemName', 'workspaceId')

Een functie aanroepen

Nadat u functies hebt opgehaald uit een UDF-item, roept u deze op naam aan. Python ondersteunt positionele en benoemde parameters. Voorbeelden van Scala en R gebruiken positionele parameters.

# Positional parameters
myFunctions.functionName('value1', 'value2')

# Named parameters (recommended for clarity)
myFunctions.functionName(parameter1='value1', parameter2='value2')

Standaardparameterwaarden

Fabric functies voor gebruikersgegevens ondersteunen standaardargumentwaarden. Wanneer u functies aanroept die worden opgehaald via notebookutils.udf.getFunctions, kan elke parameter met een gedefinieerde standaardwaarde worden weggelaten. De runtime gebruikt automatisch de standaardwaarde. U kunt ook benoemde argumenten opgeven om specifieke standaardwaarden te overschrijven terwijl anderen op hun standaardwaarden blijven staan.

# Assume the UDF item defines a function like:
# def score_customer(customerId: str, startDate: datetime = "2025-01-01T00:00:00Z", isActive: bool = True, maxRecords: int = 100) -> dict
# The datetime defaults are specified as strings in the signature; the runtime parses them to datetime at invocation time.

# 1. Call without optional parameters — defaults are used for startDate, isActive, and maxRecords
result = myFunctions.scoreCustomer(customerId='C001')

# 2. Override one default via a named argument, keep the others at their defaults
result = myFunctions.scoreCustomer(customerId='C001', maxRecords=50)

# 3. Pass a date/time in ISO 8601 format for reliable parsing
result = myFunctions.scoreCustomer(customerId='C001', startDate='2025-12-31T23:59:59Z')

Ondersteunde standaardinvoertypen

De volgende typen worden ondersteund als standaardparameterwaarden:

Standaardtype Notes
Snaar / Touwtje Een JSON-serialiseerbare tekenreeks.
Datum/tijd-tekenreeks Geef het op als een tekenreeks in de functie-signature. De runtime parseert deze tijdens datetime aanroeptijd. Gebruik een consistente indeling zoals ISO 8601 (bijvoorbeeld 2025-12-31T23:59:59Z).
Boolean True of False.
Integer Een geheel getal.
zweven Elke drijvende-kommawaarde.
List Moet JSON-serialiseerbaar zijn; geef de voorkeur aan None in de functiehandtekening en wijs het binnen de functie toe om problemen met veranderbare standaarden te voorkomen.
Woordenlijst Moet JSON-serialiseerbaar zijn; geef de voorkeur None aan in de handtekening en wijs deze toe in de functie.
Pandas DataFrame Geleverd als een JSON-object dat de SDK converteert naar een pandas-type. Vereist fabric-user-data-functions versie 1.0.0 of hoger.
pandas-serie Geleverd als een JSON-matrix met objecten die de SDK converteert naar een pandas-type. Vereist fabric-user-data-functions versie 1.0.0 of hoger.

Beperkingen en richtlijnen

Standaardwaarden moeten JSON-serializeerbaar zijn (sets en tuples worden niet ondersteund). Voor standaardinstellingen van lijsten of woordenboeken, gebruik None in de signatuur en wijs de daadwerkelijke standaardwaarde binnen de functie toe om gedeelde veranderlijke standaardwaarden te vermijden. Gebruik de ISO 8601-indeling (bijvoorbeeld 2025-12-31T23:59:59Z) voor de standaardinstellingen voor datum/tijd. Voor het gebruik van pandas DataFrame of Series als standaard is versie 1.0.0 of hoger vereist fabric-user-data-functions .

Details weergeven

U kunt UDF-itemmetagegevens en functiehandtekeningen programmatisch inspecteren.

UDF-itemdetails weergeven

display(myFunctions.itemDetails)

Details van de functie weergeven

display(myFunctions.functionDetails)

Aanbeveling

Controleer functionDetails altijd wanneer u met een nieuw UDF-item werkt. Dit helpt u bij het controleren van beschikbare functies en de verwachte parametertypen voordat u aanroept.

Foutafhandeling

UDF-aanroepen verpakken in taalgerichte foutafhandeling om ontbrekende functies of onverwachte parametertypen correct te beheren. Controleer altijd of er een functie bestaat in het UDF-item voordat u deze aanroept.

import json

try:
    validators = notebookutils.udf.getFunctions('DataValidators')

    # Check if function exists before calling
    functions_info = json.loads(validators.functionDetails)
    function_names = [f['Name'] for f in functions_info]

    if 'validateSchema' in function_names:
        is_valid = validators.validateSchema(
            schema='sales_schema',
            data_path='Files/data/sales.csv'
        )
        print(f"Schema validation: {'passed' if is_valid else 'failed'}")
    else:
        print("validateSchema function not available in this UDF item")
        print(f"Available functions: {', '.join(function_names)}")

except AttributeError as e:
    print(f"Function not found: {e}")
except TypeError as e:
    print(f"Parameter type mismatch: {e}")
except Exception as e:
    print(f"Error invoking UDF: {e}")

UDF-functies gebruiken in een gegevenspijplijn

U KUNT UDF-functies opstellen om herbruikbare ETL-stappen te bouwen:

etl_functions = notebookutils.udf.getFunctions('ETLUtilities')

df = spark.read.csv('Files/raw/sales.csv', header=True)
cleaned_df = etl_functions.removeOutliers(df, columns=['amount'])
enriched_df = etl_functions.addCalculatedColumns(cleaned_df)
validated_df = etl_functions.validateAndFilter(enriched_df)

validated_df.write.mode('overwrite').parquet('Files/processed/sales.parquet')
print("ETL pipeline completed using UDF functions")

Belangrijk

UDF-aanroepen hebben overhead. Als u dezelfde functie herhaaldelijk met dezelfde parameters aanroept, kunt u het resultaat in de cache opslaan. Vermijd het aanroepen van UDF-functies in strakke lussen, indien mogelijk.