Apache Spark 如何在pandas_udf中使用Hyperopt和MLFlow?

6qqygrtg  于 7个月前  发布在  Apache
关注(0)|答案(1)|浏览(62)

我正在构建多个Prophet模型,每个模型都传递给一个pandas_udf函数,该函数训练模型并将结果存储在MLflow中。

@pandas_udf(result_schema, PandasUDFType.GROUPED_MAP)
def forecast(data):
......
   with mlflow.start_run() as run: 
......

字符串
然后我称之为UDF,它为每个KPI训练模型。

df.groupBy('KPI').apply(forecast)


我们的想法是,对于每个KPI,模型将使用多个超参数进行训练,并将每个模型的最佳参数存储在MLflow中。我想使用Hyperopt使搜索更有效。
在这种情况下,我应该把目标函数放在哪里?因为每个模型的数据都传递给了UDF,我想在UDF中创建一个内部函数,每次运行都使用数据。这有意义吗?

55ooxyrt

55ooxyrt1#

如果我没记错的话,你不能这样做,因为它会像嵌套的Spark执行一样,而且它不会与Spark一起工作。你需要改变方法,比如:

for kpi in list_of_kpis:
  run_hyperopt_tuning

字符串
如果您需要分别调优每个KPI模型的参数-因为它将分别优化参数。
如果KPI就像模型的超参数,那么你可以将KPI列表包含到搜索空间中,并在执行训练和评估的函数中加载必要的数据。

相关问题