Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Modulen notebookutils.udf innehåller verktyg för att integrera notebook-kod med UDF-objekt (User Data Function). Du kan komma åt funktioner från ett UDF-objekt på samma arbetsyta eller mellan olika arbetsytor och sedan anropa dessa funktioner efter behov. UDF-objekt främjar återanvändning av kod, centraliserat underhåll och teamsamarbete.
Använd UDF-verktyg för att:
- Funktionshämtning – Åtkomstfunktioner från UDF-objekt efter namn.
- Åtkomst mellan arbetsytor – Använd funktioner från UDF-objekt på andra arbetsytor.
- Funktionsidentifiering – Granska tillgängliga funktioner och deras signaturer.
- Flexibel anrop – Anropa funktioner med språkanpassade parametrar.
Anmärkning
Du behöver läsbehörighet till ett UDF-objekt på målarbetsytan för att hämta dess funktioner. Undantag från UDF-funktioner sprids till den anropande notebook-filen.
I följande tabell visas de tillgängliga UDF-metoderna:
| Metod | Signature | Beskrivning |
|---|---|---|
getFunctions |
getFunctions(udf: String, workspaceId: String = ""): UDF |
Hämtar alla funktioner från ett UDF-objekt med artefakt-ID eller namn. Returnerar ett objekt med anropsbara funktionsattribut. |
Det returnerade objektet visar följande egenskaper:
| Fastighet | Type | Beskrivning |
|---|---|---|
functionDetails |
List | En lista över ordlistor för funktionsmetadata. Varje ordlista innehåller: Name (funktionsnamn), Description (funktionsbeskrivning), Parameters (lista över parameterdefinitioner), FunctionReturnType (returtyp) och DataSourceConnections (datakällanslutningar används). |
itemDetails |
Ordbok | En ordlista med UDF-objektmetadata med nycklar: Id (artefakt-ID), Name (objektnamn), WorkspaceId (arbetsyte-ID) och CapacityId (kapacitets-ID). |
<functionName> |
Callable | Varje funktion i UDF-objektet blir en anropsbar metod för det returnerade objektet. Använd myFunctions.functionName(...) för att anropa. |
Tips/Råd
Hämta UDF-funktioner en gång och cachelagra omslutningsobjektet. Undvik att anropa getFunctions() upprepade gånger i en slinga – lagra istället resultatet i cachen för att minimera omkostnaderna.
Hämta funktioner från en UDF
Använd notebookutils.udf.getFunctions() för att hämta alla funktioner från ett UDF-objekt. Du kan också ange ett arbetsyte-ID för åtkomst mellan arbetsytor.
# 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')
Anropa en funktion
När du har hämtat funktioner från ett UDF-objekt anropar du dem med namn. Python stöder positionella och namngivna parametrar. Scala- och R-exempel använder positionsparametrar.
# Positional parameters
myFunctions.functionName('value1', 'value2')
# Named parameters (recommended for clarity)
myFunctions.functionName(parameter1='value1', parameter2='value2')
Standardparametervärden
Fabric användardatafunktioner stöder standardargumentvärden. När du anropar funktioner som hämtats via notebookutils.udf.getFunctionskan alla parametrar som har en definierad standard utelämnas – körningen använder standardvärdet automatiskt. Du kan också ange namngivna argument för att åsidosätta specifika standardvärden samt lämna andra oförändrade.
# 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')
Standardindatatyper som stöds
Följande typer stöds som standardparametervärden:
| Standardtyp | Notes |
|---|---|
| String | Alla JSON-serialiserbara strängar. |
| Datetime-sträng | Ange som en sträng i funktionssignaturen. Körningen parsar den till datetime vid anrop. Använd ett konsekvent format som ISO 8601 (till exempel 2025-12-31T23:59:59Z). |
| Boolean |
True eller False. |
| Integer | Alla heltalsvärden. |
| Flyta | Alla flyttalsvärden. |
| List | Måste vara JSON-serierbar; None föredras i signaturen och tilldelas inuti funktionen för att undvika fallgropar med föränderliga standardvärden. |
| Ordbok | Måste vara JSON-serieliserbar; föredra None i signaturen och tilldela inuti funktionen. |
| Pandas DataFrame | Tillhandahålls som ett JSON-objekt som SDK:t konverterar till en Pandas-typ. Kräver fabric-user-data-functions version 1.0.0 eller senare. |
| Pandas-serien | Tillhandahålls som en JSON-matris med objekt som SDK:t konverterar till en Pandas-typ. Kräver fabric-user-data-functions version 1.0.0 eller senare. |
Begränsningar och vägledning
Standardvärdena måste vara JSON-serialiserbara (uppsättningar och tupplar stöds inte). För list- eller ordlistestandarder använder du None i signaturen och tilldelar den verkliga standardinställningen i funktionen för att undvika delade, föränderliga standardvärden. Använd ISO 8601-format (till exempel 2025-12-31T23:59:59Z) för datetime-standardvärden. Användning av Pandas DataFrame eller Serie som standard kräver fabric-user-data-functions version 1.0.0 eller senare.
Visa detaljer
Du kan granska UDF-objektmetadata och funktionssignaturer programmatiskt.
Visa detaljer om UDF-objekt
Visa funktionsinformation
Tips/Råd
Inspektera functionDetails alltid när du arbetar med ett nytt UDF-objekt. Detta hjälper dig att verifiera tillgängliga funktioner och deras förväntade parametertyper före anrop.
Felhantering
Omslut UDF-anrop i språkanpassad felhantering för att hantera saknade funktioner eller oväntade parametertyper på ett korrekt sätt. Kontrollera alltid att det finns en funktion i UDF-objektet innan du anropar den.
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}")
Använda UDF-funktioner i en datapipeline
Du kan skapa UDF-funktioner för att skapa återanvändbara ETL-steg:
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")
Viktigt!
UDF-anrop har omkostnader. Om du anropar samma funktion med samma parametrar upprepade gånger bör du överväga att cachelagra resultatet. Undvik att anropa UDF-funktioner i snäva loopar när det är möjligt.