Мне нужно реализовать динамическую c функцию «принеси свой код» для регистрации пользовательских функций, созданных вне моего собственного кода. Это контейнер, и точка входа - стандартный интерпретатор python (не pypsark). Основываясь на настройках конфигурации при запуске, спарк-контейнер инициализирует себя примерно так: Мы не знаем заранее определения функции, но мы можем предварительно установить зависимости, если необходимо, на контейнере.
def register_udf_module(udf_name, zip_or_py_path, file_name, function_name, return_type="int"):
# Psueduocode:
global sc, spark
sc.addPyFile(zip_or_py_path)
module_ref = some_inspect_function_1(zip_or_py_path)
file_ref = module_ref[file_name]
function_ref = module_ref[function_name]
spark.udf.register(udf_name, function_ref, return_type)
Кажется, я не могу найти никаких ссылок на то, как это сделать sh это. И, в частности, случай использования заключается в том, что после инициализации искрового кластера путем его запуска пользователям потребуется этот UDF, доступный для функций SQL (через соединение Thrift JDB C). Я не знаю никакого интерфейса между соединением JDBC / SQL и возможностью регистрации UDF, поэтому он должен быть запущен для запросов SQL, и я не могу ожидать, что позже пользователь вызовет 'spark .udf.register 'на их стороне.