Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Moduł notebookutils.udf udostępnia narzędzia do integrowania kodu notesu z elementami funkcji UDF (User Data Function). Dostęp do funkcji można uzyskać z elementu UDF w tym samym obszarze roboczym lub w różnych obszarach roboczych, a następnie wywołać te funkcje w razie potrzeby. Elementy funkcji UDF promują możliwość ponownego obsługi kodu, scentralizowaną konserwację i współpracę zespołową.
Użyj narzędzi UDF, aby:
- Pobieranie funkcji — uzyskiwanie dostępu do funkcji z elementów UDF według nazwy.
- Dostęp między obszarami roboczymi — używaj funkcji z elementów UDF w innych obszarach roboczych.
- Odnajdywanie funkcji — sprawdzanie dostępnych funkcji i ich podpisów.
- Elastyczne wywołanie — wywoływanie funkcji przy użyciu parametrów odpowiednich dla języka.
Uwaga / Notatka
Aby pobrać jego funkcje, musisz mieć dostęp do odczytu do elementu UDF w docelowym obszarze roboczym. Wyjątki od funkcji UDF są propagowane do notatnika wywołującego.
W poniższej tabeli wymieniono dostępne metody funkcji zdefiniowanej przez użytkownika:
| Metoda | Signature | Opis |
|---|---|---|
getFunctions |
getFunctions(udf: String, workspaceId: String = ""): UDF |
Pobiera wszystkie funkcje z elementu UDF według identyfikatora artefaktu lub nazwy. Zwraca obiekt z atrybutami funkcji z możliwością wywołania. |
Zwrócony obiekt uwidacznia następujące właściwości:
| Majątek | Typ | Opis |
|---|---|---|
functionDetails |
List | Lista słowników metadanych funkcji. Każdy słownik zawiera: Name (nazwa funkcji), Description (opis funkcji), (listę definicji parametrów), ParametersFunctionReturnType (typ zwracany) i DataSourceConnections (używane połączenia ze źródłem danych). |
itemDetails |
Słownik | Słownik metadanych elementu UDF z kluczami: Id (identyfikator artefaktu), Name (nazwa elementu), WorkspaceId (identyfikator obszaru roboczego) i CapacityId (identyfikator pojemności). |
<functionName> |
Callable | Każda funkcja w elemencie UDF staje się metodą wywoływaną dla zwróconego obiektu. Użyj polecenia myFunctions.functionName(...) , aby wywołać polecenie . |
Tip
Pobierz funkcje UDF jednorazowo i buforuj obiekt opakowujący. Unikaj wielokrotnego wywoływania getFunctions() w pętli — buforuj wynik zamiast tego, aby zminimalizować obciążenie.
Pobieranie funkcji z UDF (user-defined function)
Użyj polecenia notebookutils.udf.getFunctions() , aby pobrać wszystkie funkcje z elementu UDF. Opcjonalnie możesz określić identyfikator obszaru roboczego dla dostępu między obszarami roboczymi.
# 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')
Wywoływanie funkcji
Po pobraniu funkcji z elementu UDF wywołaj je według nazwy. Język Python obsługuje parametry pozycyjne i nazwane. Przykłady języka Scala i R używają parametrów pozycyjnych.
# Positional parameters
myFunctions.functionName('value1', 'value2')
# Named parameters (recommended for clarity)
myFunctions.functionName(parameter1='value1', parameter2='value2')
Domyślne wartości parametrów
Fabric funkcje danych użytkownika obsługują domyślne wartości argumentów. Po wywołaniu funkcji pobranych za pomocą notebookutils.udf.getFunctionspolecenia można pominąć dowolny parametr, który ma zdefiniowaną wartość domyślną — środowisko uruchomieniowe automatycznie używa wartości domyślnej. Można również podać nazwane argumenty, aby zastąpić określone wartości domyślne, pozostawiając inne na ich domyślnych ustawieniach.
# 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')
Obsługiwane domyślne typy danych wejściowych
Następujące typy są obsługiwane jako domyślne wartości parametrów:
| Typ domyślny | Notes |
|---|---|
| String | Dowolny ciąg z możliwością serializacji JSON. |
| Ciąg daty/godziny | Określ jako ciąg w nagłówku funkcji. Środowisko uruchomieniowe parsuje je do datetime w czasie wywołania. Użyj spójnego formatu, takiego jak ISO 8601 (na przykład 2025-12-31T23:59:59Z). |
| logiczny |
True lub False. |
| Integer | Dowolna wartość całkowita. |
| Pływak | Dowolna wartość zmiennoprzecinkowa. |
| List | Musi być serializowalny w formacie JSON; preferuj None w sygnaturze i przypisz wartość wewnątrz definicji funkcji, aby uniknąć pułapek związanych z modyfikowalnymi wartościami domyślnymi. |
| Słownik | Musi być serializowalny w formacie JSON; preferuj użycie None w sygnaturze i przypisz wewnątrz funkcji. |
| Ramka danych biblioteki pandas | Podany jako obiekt JSON, który zestaw SDK konwertuje na typ biblioteki pandas. Wymaga fabric-user-data-functions wersji 1.0.0 lub nowszej. |
| Pandas Series | Podana jako tablica JSON obiektów, które zestaw SDK konwertuje na typ biblioteki pandas. Wymaga fabric-user-data-functions wersji 1.0.0 lub nowszej. |
Ograniczenia i wskazówki
Wartości domyślne muszą być serializowalne w formacie JSON (zestawy i krotki nie są obsługiwane). W przypadku domyślnych wartości listy lub słownika użyj None w sygnaturze funkcji i przypisz rzeczywistą wartość domyślną wewnątrz funkcji, aby uniknąć współdzielonych mutowalnych wartości domyślnych. Użyj formatu ISO 8601 (na przykład 2025-12-31T23:59:59Z) dla wartości domyślnych daty/godziny. Używanie ramki danych pandas lub serii jako domyślnych wymaga wersji fabric-user-data-functions 1.0.0 lub nowszej.
Wyświetlanie szczegółów
Metadane elementów UDF i podpisy funkcji można sprawdzić programowo.
Wyświetlanie szczegółów elementu UDF
Wyświetlanie szczegółów funkcji
Tip
Zawsze sprawdzaj functionDetails podczas pracy z nowym elementem funkcji zdefiniowanej przez użytkownika. Ułatwia to zweryfikowanie dostępnych funkcji i ich oczekiwanych typów parametrów przed wywołaniem.
Obsługa błędów
Opakuj wywołania funkcji definiowanych przez użytkownika w obsługę błędów odpowiednią dla języka, aby bezproblemowo zarządzać brakującymi funkcjami lub nieoczekiwanymi typami parametrów. Przed wywołaniem funkcji należy zawsze sprawdzić, czy funkcja istnieje w elemencie UDF.
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}")
Używanie funkcji UDF w potoku danych
Możesz komponować funkcje UDF, aby tworzyć wielokrotnego użytku kroki ETL.
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")
Ważna
Wywołania funkcji UDF mają narzut. Jeśli wielokrotnie wywołujesz tę samą funkcję z tymi samymi parametrami, rozważ buforowanie wyniku. Unikaj wywoływania funkcji UDF w ciasnych pętlach, jeśli to możliwe.