Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Модуль предоставляет утилиты для интеграции кода блокнота с элементами функции работы с пользовательскими данными (UDF). Вы можете получить доступ к функциям из элемента UDF в одной рабочей области или в разных рабочих областях, а затем вызвать эти функции по мере необходимости. Элементы UDF повышают повторное использование кода, централизованное обслуживание и совместную работу команды.
Используйте служебные программы UDF для:
- Извлечение функции — доступ к функциям из элементов UDF по имени.
- Доступ между рабочими областями — использование функций из элементов UDF в других рабочих областях.
- Обнаружение функций — проверка доступных функций и их сигнатур.
- Гибкий вызов — вызов функций с параметрами, соответствующими языку.
Замечание
Для получения его функций требуется доступ на чтение к элементу UDF в целевой рабочей области. Исключения из функций UDF распространяются на вызываемую записную книжку.
В следующей таблице перечислены доступные методы UDF:
| Метод | Signature | Описание |
|---|---|---|
getFunctions |
getFunctions(udf: String, workspaceId: String = ""): UDF |
Извлекает все функции из элемента UDF по идентификатору артефакта или имени. Возвращает объект с вызываемыми атрибутами функции. |
Возвращаемый объект предоставляет следующие свойства:
| Недвижимость | Тип | Описание |
|---|---|---|
functionDetails |
List | Список словарей метаданных функции. Каждый словарь включает: Name (имя функции), (описание функции), Description (список определений параметров), ParametersFunctionReturnType (возвращаемый тип) и DataSourceConnections (используемые подключения к источнику данных). |
itemDetails |
Словарь | Словарь метаданных элемента UDF с ключами: Id (идентификатор артефакта), (имя элемента), NameWorkspaceId (идентификатор рабочей области) и CapacityId (идентификатор емкости). |
<functionName> |
Callable | Каждая функция в элементе UDF становится вызываемым методом возвращаемого объекта. Используйте myFunctions.functionName(...) для вызова. |
Подсказка
Извлеките функции UDF один раз и кэшируйте объект-оболочку. Избегайте многократного вызова getFunctions() в цикле— кэшируйте результат, чтобы свести к минимуму затраты.
Получение функций из UDF
Используется notebookutils.udf.getFunctions() для получения всех функций из элемента UDF. При необходимости можно указать идентификатор рабочей области для доступа между рабочими областями.
# 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')
Вызов функции
После получения функций из элемента UDF вызовите их по имени. Python поддерживает позиционные и именованные параметры. Примеры Scala и R используют позиционные параметры.
# Positional parameters
myFunctions.functionName('value1', 'value2')
# Named parameters (recommended for clarity)
myFunctions.functionName(parameter1='value1', parameter2='value2')
Значения параметров по умолчанию
Fabric пользовательские функции данных поддерживают значения аргументов по умолчанию. При вызове функций, полученных с помощью notebookutils.udf.getFunctions, можно исключить любой параметр, имеющий определенный по умолчанию, — среда выполнения автоматически использует значение по умолчанию. Кроме того, можно указать именованные аргументы для переопределения конкретных значений по умолчанию, оставляя другие без изменений.
# 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')
Поддерживаемые типы входных данных по умолчанию
Следующие типы поддерживаются в качестве значений параметров по умолчанию:
| Тип по умолчанию | Notes |
|---|---|
| String | Любая строка, сериализуемая в формате JSON. |
| Строка даты и времени | Укажите строку в сигнатуре функции. Время выполнения преобразует это к datetime во время вызова. Используйте согласованный формат, например ISO 8601 (например, 2025-12-31T23:59:59Z). |
| Boolean |
True или False. |
| Integer | Любое целочисленное значение. |
| Плавать | Любое значение с плавающей запятой. |
| List | Должен быть сериализуемым в формате JSON; предпочтительно использовать None в сигнатуре и присваивать внутри функции, чтобы избежать изменяемых значений по умолчанию. |
| Словарь | Должен быть сериализуемым в формате JSON; предпочтительно использовать None в сигнатуре и присваивать внутри функции. |
| DataFrame pandas | Предоставляется как объект JSON, который пакет SDK преобразует в тип pandas. Требуется fabric-user-data-functions версия 1.0.0 или более поздняя. |
| Серия pandas | Предоставляется в виде массива объектов JSON, которые пакет SDK преобразует в тип pandas. Требуется fabric-user-data-functions версия 1.0.0 или более поздняя. |
Ограничения и рекомендации
Значения по умолчанию должны быть сериализуемыми в формате JSON (наборы и кортежи не поддерживаются). Для списков или словарей по умолчанию используйте None сигнатуру и назначьте реальное значение по умолчанию внутри функции, чтобы избежать общих изменяемых значений по умолчанию. Используйте формат ISO 8601 (например, 2025-12-31T23:59:59Z) для даты и времени по умолчанию. Для использования pandas DataFrame или Series в качестве стандартной версии требуется fabric-user-data-functions версия 1.0.0 или более поздняя.
Отображение сведений
Вы можете программным образом проверять метаданные и подписи элементов UDF.
Отображение сведений об элементе UDF
Отображение сведений о функции
Подсказка
Всегда проверяйте functionDetails при работе с новым элементом UDF. Это помогает проверить доступные функции и ожидаемые типы параметров перед вызовом.
Обработка ошибок
Оберните вызовы UDF в соответствующую языковую обработку ошибок, чтобы корректно управлять отсутствующими функциями или непредвиденными типами параметров. Перед вызовом всегда убедитесь, что функция существует в элементе 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}")
Использование функций UDF в конвейере данных
Вы можете создавать функции UDF для создания повторно используемых шагов 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")
Это важно
Вызовы UDF имеют накладные расходы. При многократном вызове той же функции с теми же параметрами рекомендуется кэширование результата. Избегайте вызова функций UDF в жестких циклах, когда это возможно.