Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Определяемые пользователем операторы в Конструкторе Lakeflow определяются в YAML. Все типы операторов (uc-udf, uc-udtfи python-run-function) используют схему user-defined-operator-v0.1.0 , которая определяет поля конфигурации с помощью формата схемы JSON.
Сведения о создании определяемых пользователем операторов см. в разделе "Определяемые пользователем операторы" в конструкторе Lakeflow.
Корневые свойства
Каждый файл YAML оператора начинается с набора корневых свойств, определяющих оператор и определяющих его поведение. В следующем примере показана общая структура:
schema: user-defined-operator-v0.1.0
type: python-run-function
name: My Operator
id: my_operator
version: '1.0.0'
description: >
What this operator does.
Can be multiple lines.
config:
type: object
properties:
my_field:
type: string
title: My Field
description: Help text
ports:
input:
- name: data
title: Input Data
output:
- name: out
title: Output
run_function:
type: inline
code: |
def run(config, inputs, spark):
return {"out": inputs["data"]}
environment:
environment_version: '4'
dependencies:
- 'pandas>=2.0'
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
schema |
струна | Yes | Идентификатор схемы. Этот параметр должен содержать значение user-defined-operator-v0.1.0. |
type |
струна | Yes | Тип оператора: uc-udf, uc-udtfили python-run-function. |
name |
струна | Yes | Отображаемое имя оператора. Оставить его коротким, чтобы соответствовать пользовательскому интерфейсу конструктора Lakeflow. Минимальная длина 1 символа. |
id |
струна | Yes | Уникальный идентификатор для типа оператора. Минимальная длина 1 символа. Рекомендуется использовать пространства имен (например finance. , или ml.) для классификации операторов. |
description |
струна | Yes | Подробное описание того, что делает оператор. Отображается пользователям в пользовательском интерфейсе. Используйте многострочный синтаксис YAML (>) для более длинных описаний. |
config |
object | Yes | Объект схемы JSON, определяющий поля конфигурации. См . раздел "Конфигурация". |
ports |
object | Нет | Определения портов ввода и вывода. См. порты. |
version |
струна | Yes | Строка версии (например, "1.0.0"). Используйте это для отслеживания выпусков собственных операторов. |
run_function |
object | Нет | Встроенный код Python для операторов python-run-function. См. run_function. |
environment |
object | Нет | Python конфигурации среды, включая зависимости. См. environment. |
Порты
Порты определяют, как оператор подключается к другим операторам в конвейере. Объект ports содержит input и output массивы.
ports:
input:
- name: input_data
title: Input Data
mime: application/vnd.databricks.dataframe
allowMultiple: true
required: true
output:
- name: out
title: Output
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
name |
струна | Yes | Уникальный идентификатор порта. Используется в ссылках на подключения и конфигурации. |
title |
струна | Нет | Метка, читаемая человеком, отображаемая в пользовательском интерфейсе. |
mime |
струна | Нет | Тип MIME для данных порта. Например: application/vnd.databricks.dataframe. |
allowMultiple |
булевый | Нет | Если trueпорт принимает несколько входящих подключений. По falseумолчанию порт принимает одно подключение и перенастраивает новый источник, заменяя существующий. |
required |
булевый | Нет | Если falseпорт является необязательным. По умолчанию: true. |
Принимаются только задокументированные свойства порта. Неизвестные ключи (например, устаревшее label поле) отклоняются проверкой схемы.
Примеры портов
UDF с портами ввода и вывода:
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
UDTF с портами ввода и вывода:
ports:
input:
- name: input_data
title: Input Data
output:
- name: clustered_data
title: Clustered Results
Функция python-run-function с несколькими входными данными и необязательным портом:
ports:
input:
- name: main_data
title: Main Data
- name: reference_data
title: Reference Table
required: false
output:
- name: joined_output
title: Joined Output
Config
Поле config представляет собой объект схемы JSON. Каждое поле конфигурации определяется как свойство в схеме. Этот формат предоставляет доступ к стандартным функциям проверки схемы JSON, таким как enum, и minimummaximumexamples.
Объект config должен иметь type: object и properties карту. При необходимости можно включить required (массив обязательных имен свойств) и additionalProperties.
config:
type: object
properties:
cluster_count:
type: number
title: Number of Clusters
description: How many clusters to create
default: 3
minimum: 1
maximum: 100
algorithm:
type: string
title: Algorithm
description: Clustering algorithm to use
enum: ['kmeans', 'dbscan', 'hierarchical']
default: kmeans
feature_col:
type: string
title: Feature Column
description: Column to use as input
format: expression
x-ui:
widget: expression
port: data
required: [cluster_count, feature_col]
additionalProperties: false
Поля свойств конфигурации
Каждое свойство в объекте поддерживает следующие стандартные config.properties поля схемы JSON:
| Поле | Тип | Description |
|---|---|---|
type |
струна | Тип данных: string, , numberinteger, booleanarrayили object. |
title |
струна | Метка, читаемая человеком, отображаемая в пользовательском интерфейсе. |
description |
струна | Текст справки, отображаемый пользователям. |
default |
any | Значение по умолчанию для поля. |
examples |
массив | Примеры значений для поля. |
enum |
массив | Исправлен список разрешенных значений. |
format |
струна | Указание семантического типа. См. значения формата. |
minimum |
number | Минимально допустимое значение (для number и integer типов). |
maximum |
number | Максимально допустимое значение (для number и integer типов). |
items |
object | Схема элементов массива (когда type есть array). |
properties |
object | Определения вложенных свойств (когда type есть object). |
required |
массив | Список обязательных вложенных имен свойств (когда type есть object). |
Другие стандартные поля схемы JSON, такие как minLength, maxLengthpatternи const также поддерживаются.
Форматирование значений
Поле format свойства конфигурации предоставляет указание семантического типа, указывающее конструктор Lakeflow, как интерпретировать значение. Эти указания позволяют использовать специализированное поведение пользовательского интерфейса и проверку.
| Формат | Description |
|---|---|
expression |
Ссылка на столбец или выражение SQL. |
table_source |
Справочник по источнику таблицы. |
file_source |
Справочник по источнику файла. |
column_expressions |
Выражения столбцов. |
sort_expressions |
Сортировать выражения. |
aggregation_expressions |
Выражения агрегирования. |
ai_function_expressions |
Выражения функций ИИ. |
is_preview |
Флаг режима автоматического просмотра. Конструктор Lakeflow задает это значение true во время предварительной версии рабочего процесса. Имя свойства конфигурации является произвольным; format: is_preview имеет значение только тега. Используйте это для пропуска побочных эффектов, таких как внешние вызовы API во время предварительной версии. |
string[] |
Массив строк. |
Мини-приложения пользовательского интерфейса
Мини-приложения настраивают отображение поля конфигурации в интерфейсе конструктора Lakeflow. Определите мини-приложения в свойстве x-ui для каждого свойства конфигурации. Если вы опустите мини-приложение, Конструктор Lakeflow использует мини-приложение по умолчанию на основе типа данных.
| Widget | Тип данных | Description |
|---|---|---|
input |
струна | Однострочный текстовый ввод. |
textarea |
струна | Многострочный текстовый регион. Поддерживает необязательное rows свойство. |
checkbox |
булевый | Стандартный флажок. |
toggle |
булевый | Тумблер. |
number |
число или целое число | Числовые входные данные с необязательными ограничениями. |
slider |
число или целое число | Визуальный ползунок для числовых диапазонов. Поддерживает необязательное step свойство. |
select |
струна | Раскрывающийся список с одним выбором. Требует использования optionsSource. |
multi-select |
массив | Раскрывающийся список с несколькими выборами. Требует использования optionsSource. |
expression |
струна | Селектор столбцов или выражений. Требует использования port. |
input
Однострочного текстового поля ввода.
api_endpoint:
type: string
title: API Endpoint
x-ui:
widget: input
textarea
Многострочный текстовый регион для более длинного содержимого. Поддерживает необязательное rows свойство для управления высотой.
message_body:
type: string
title: Message Body
x-ui:
widget: textarea
rows: 4
checkbox
Стандартный флажок для логических значений.
send_notification:
type: boolean
title: Send Notification
default: false
x-ui:
widget: checkbox
toggle
Переключатель для логических значений.
enable_logging:
type: boolean
title: Enable Logging
default: true
x-ui:
widget: toggle
number
Числовое поле ввода. Используйте minimum и maximum на самом свойстве, чтобы ограничить диапазон.
num_clusters:
type: number
title: Number of Clusters
default: 3
minimum: 1
maximum: 100
x-ui:
widget: number
slider
Визуальный ползунок для выбора числовых значений в диапазоне. Используйте minimum и maximum для свойства, чтобы задать диапазон, а stepx-ui также управлять увеличением.
confidence_threshold:
type: number
title: Confidence Threshold
default: 0.8
minimum: 0
maximum: 1
x-ui:
widget: slider
step: 0.05
select
Раскрывающийся список с одним выбором.
optionsSource Требуется определить, откуда приходят значения раскрывающегося списка. См. источники параметров.
aggregation_type:
type: string
title: Aggregation Type
x-ui:
widget: select
optionsSource:
type: static
values: ['sum', 'avg', 'min', 'max', 'count']
multi-select
Раскрывающийся список с несколькими выборами для выбора нескольких значений. Используется type: array с items: { type: string } свойством. Требуется optionsSource. См. источники параметров.
feature_columns:
type: array
title: Feature Columns
items:
type: string
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: input_data
expression
Селектор столбцов или выражений, позволяющий пользователям выбирать столбец из входных данных или записывать пользовательское выражение SQL. Задайте format: expression для свойства и укажите входные данныеportx-ui. Это полезно:
- Когда пользователь должен выбрать столбец из входных данных.
- Если пользователю может потребоваться написать пользовательское выражение SQL.
- Для параметров, ссылающихся на динамические данные в конвейере.
amount:
type: string
title: Amount
format: expression
x-ui:
widget: expression
port: input_data
Источники параметров
Для select и multi-select мини-приложений необходимо определить, откуда optionsSourceприходят параметры раскрывающегося списка. Существует два источника: static (фиксированный список, определенный в YAML) и inputColumns (имена столбцов из входного порта).
Статические параметры
Фиксированный список значений, определенных в YAML.
optionsSource:
type: static
values: ['option1', 'option2', 'option3']
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
type |
струна | Yes | Этот параметр должен содержать значение static. |
values |
массив | Yes | Массив строковых значений для раскрывающегося списка. |
Входные столбцы
Динамически заполняет раскрывающийся список именами столбцов из входного порта.
optionsSource:
type: inputColumns
port: input_data
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
type |
струна | Yes | Этот параметр должен содержать значение inputColumns. |
port |
струна | Yes | Имя входного порта для получения имен столбцов. Должен соответствовать name одному из определенных входных портов. |
run_function
Свойство run_function позволяет внедрять код Python непосредственно в конфигурацию YAML для операторов python-run-function. Это устраняет необходимость зарегистрировать отдельную функцию каталога Unity.
run_function:
type: inline
code: |
def run(config, inputs, spark):
df = inputs["data"]
threshold = config["threshold"]
return {"out": df.filter(df["score"] > threshold)}
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
type |
струна | Yes | Этот параметр должен содержать значение inline. |
code |
струна | Yes | Python исходный код. Должен определить функцию run() . |
Функция run() получает три аргумента:
-
config: словарь значений конфигурации, заданных пользователем в пользовательском интерфейсе. -
inputs: словарь сопоставляет имена входных портов с Кадрами данных. -
spark: активная sparkSession.
Функция должна возвращать имена выходных портов словаря в кадры данных. Ключи должны точно соответствовать name полю каждого выходного порта, определенного в ports.output. Например, с портом вывода с именем out:
return {"out": result_df}
С несколькими выходными портами:
return {"match": match_df, "rest": rest_df}
environment
Свойство environment указывает среду Python для операторов python-run-function. Используйте его для закрепления версии среды и объявления зависимостей pip.
environment:
environment_version: '4'
dependencies:
- 'scikit-learn>=1.3'
- 'pandas>=2.0'
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
environment_version |
струна | Нет | Версия бессерверной среды, которая задает базовую среду выполнения Python и предварительно установленные библиотеки. Для доступных версий см. Версии окружения. Например: "4". |
dependencies |
массив строк | Нет | Список описателей зависимостей pip. Каждая запись соответствует стандартному синтаксису pip (например, "pandas>=2.0"). |
Полные примеры
UDF на основе UC
В этом примере определяется оператор UDF на основе каталога Unity, который вычисляет составные интересы.
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Compound Interest
id: finance.compound_interest
version: '1.0.0'
description: >
Calculates compound interest based on principal, rate, and time period.
config:
type: object
properties:
principal:
type: string
title: Principal Amount
format: expression
x-ui:
widget: expression
port: input_data
annual_rate:
type: number
title: Annual Interest Rate
default: 5.0
minimum: 0
maximum: 100
x-ui:
widget: number
years:
type: number
title: Number of Years
default: 10
minimum: 1
maximum: 50
x-ui:
widget: slider
step: 1
compound_frequency:
type: string
title: Compounding Frequency
default: 'monthly'
x-ui:
widget: select
optionsSource:
type: static
values: ['daily', 'monthly', 'quarterly', 'annually']
required: [principal, annual_rate]
additionalProperties: false
ports:
input:
- name: input_data
title: Input Data
output:
- name: out
title: Output
оператор run-function Python
В этом примере определяется python-run-function оператор, который сегментирует клиентов с помощью кластеризации K-Средних.
schema: user-defined-operator-v0.1.0
type: python-run-function
name: Customer Segmentation
id: ml.customer_segmentation
version: '1.2.0'
description: >
Segments customers into groups based on selected features
using K-Means clustering. Returns customer IDs with their
assigned segment numbers.
config:
type: object
properties:
num_segments:
type: integer
title: Number of Segments
description: How many customer segments to create
default: 3
minimum: 2
maximum: 20
x-ui:
widget: number
customer_id_column:
type: string
title: Customer ID Column
description: Column containing customer identifiers
x-ui:
widget: select
optionsSource:
type: inputColumns
port: customer_data
feature_columns:
type: array
title: Feature Columns
description: Columns to use for segmentation
items:
type: string
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: customer_data
normalize_features:
type: boolean
title: Normalize Features
description: Whether to normalize feature values before clustering
default: true
x-ui:
widget: toggle
required: [num_segments, customer_id_column, feature_columns]
additionalProperties: false
ports:
input:
- name: customer_data
title: Customer Data
mime: application/vnd.databricks.dataframe
output:
- name: segmented_customers
title: Segmented Customers
run_function:
type: inline
code: |
def run(config, inputs, spark):
from pyspark.ml.feature import VectorAssembler, StandardScaler
from pyspark.ml.clustering import KMeans
df = inputs["customer_data"]
id_col = config["customer_id_column"]
features = config["feature_columns"]
k = config["num_segments"]
normalize = config.get("normalize_features", True)
assembler = VectorAssembler(inputCols=features, outputCol="features_vec")
assembled = assembler.transform(df)
if normalize:
scaler = StandardScaler(inputCol="features_vec", outputCol="scaled_features")
model = scaler.fit(assembled)
assembled = model.transform(assembled)
feature_col = "scaled_features"
else:
feature_col = "features_vec"
kmeans = KMeans(k=k, featuresCol=feature_col, predictionCol="segment")
result = kmeans.fit(assembled).transform(assembled)
return {"segmented_customers": result.select(id_col, "segment")}
environment:
environment_version: '4'
dependencies:
- 'scikit-learn>=1.3'
Краткий справочник
Обязательные корневые свойства
-
schema:user-defined-operator-v0.1.0 -
name: отображаемое имя -
id: уникальный идентификатор -
description: что делает оператор -
config: объект схемы JSON -
type:uc-udf,uc-udtfилиpython-run-function -
version: строка версии, определяемая автором
Необязательные корневые свойства
-
ports: определения входных и выходных портов -
run_function: встроенный код Python (толькоpython-run-function) -
environment: среда Python и зависимости (толькоpython-run-function)
Типы данных свойств конфигурации
string | boolean | number | integer | array | object
Мини-приложения пользовательского интерфейса
input | textarea | checkbox | toggle | number | slider | select | multi-select | expression
Источники параметров
static (фиксированные значения) | inputColumns (из порта ввода)
Форматирование значений
expression | table_source | file_source | column_expressions | sort_expressions | aggregation_expressions | ai_function_expressions | is_preview | string[]