apache-spark - 使用 databricks-connect 从 pycharm 调用 spark_udf 时的 MLflow FileNotFound
问题描述
我正在将一个 scikit-learn 训练的模型保存到我的 Windows 笔记本电脑中的 MLflow 模型注册表中。我正在使用 databricks-connect 连接到 Azure Databricks 集群并从我的本地 Pycharm 在那里训练模型,但是为了开发,我在我的笔记本电脑中启动模型注册表并将训练好的模型保存在其中 - 以避免必须设置远程访问 DBFS .
我在使用 spark_udf 函数时遇到问题。我可以从笔记本电脑的模型注册表中读取模型,但不能将其用作 Databricks 集群中的 UDF:
model_udf = mlflow.pyfunc.spark_udf(spark, "models:/mymodel/production") # this works fine
struct_col = F.struct(*df.columns)
predictions = df.withColumn("pred_spark", model_udf(struct_col))
predictions.show() # throws an exception(see below)
pyspark.sql.utils.PythonException:从 UDF 引发异常:'FileNotFoundError:
[Errno 2] 没有这样的文件或目录:
'/local_disk0/spark-1fa39b20-9d2c-4697-957c-392d80326dee/exectutor-57b039d8-472405-472472-612e912e9b87b87b3ddddddddddd dd/spark-e44242414.4424.44c6 park y44c6e4.4b4c6 aky44.4c6pary7b4.4c6pary7-4c6 pary-4.4 car 0944cc91ef4d/c:\temp\tmpsl4hpeyt.zip'
最后一部分很奇怪,因为它混合了 linux 风格的路由和 Windows 路由(就像我的 Windows 笔记本电脑本地目录中的路由)。我以为驱动程序会从模型注册表中读取模型并将其广播给工作人员以调用 UDF,但看起来工作人员正试图直接从远程模型注册表中获取它,对吗?是否有不需要将模型保存在远程模型注册表中的解决方案 - 或者至少,配置安全性以访问 DBFS?
编辑:设置将模型注册到远程注册表后(没那么难!)我现在可以将注册模型下载为 sklearn 模型并使用它进行预测,但我不能通过 spark_udf 做同样的事情。我得到
- 如果我在函数 spark_udf 中通过 runs:/.... 指定模型,则会出现相同的 FileNotFound 错误
- 如果我在 spark_udf 中通过 model:/... 指定模型,则会出现 SSL 错误(未经验证的自签名证书),即使我已在 .databrickscfg 中明确添加了新行
insecure = True
- 因为这不起作用,所以也添加了os.environ["MLFLOW_TRACKING_INSECURE_TLS"] = "true"
但没有效果。我猜它正在做一些事情,因为至少我可以从注册表中下载模型,当它不是 spark_udf,但看起来像“工人?” 当他们尝试做同样的事情时遇到问题(这是我的猜测,不知道这是否有意义)
解决方案
Databricks 的构造几乎可以在本机函数中的任何地方使用 dbfs。当您在驱动程序或执行程序上指定一些本地路径或本地路径时,它无论如何都会在 DBFS 上查找。这就是为什么 /local_disk0/ 是默认的 tempt dbfs 位置,它在其他地方添加了您指定的子目录。我想在 spark 驱动程序上使用文件夹并放弃了,因为它总是添加 /local_disk0/ 前缀。
推荐阅读
- python - 如何用泡菜保存 keras StringLookup 对象?
- multidimensional-array - 如何随机化有符号多维数组?
- php - 无法将本地 .ttf 字体添加到自定义 Wordpress 主题
- vue.js - 我的 Vue.js 代码给了我 null,而不是带有 idRecord 比较的 adm 的 ID
- python - Darknet (YOLOv4) 使用不同版本的 OpenCV,导致无法检测
- amazon-quicksight - QuickSight 中用于数据透视表可视化中的行的条件格式
- vba - 单元格中的逻辑运算符和 Excel 中的公式
- spring - 如何在 Spring Boot 上修复多个 Url
- flutter - Flutter SDK 在 Parallels win10 中得到 Permission denied?
- r - 闪亮的用户驱动过滤器逻辑