Azure Data Factory调用Databricks Notebook遇ImportError: dataclass_transform导入失败
Databricks Notebook通过ADF调用时Presidio依赖报错的解决方案
问题原因
Databricks UI中运行Notebook时,%pip安装的库仅作用于当前临时会话;而ADF调用Notebook时会启动新集群会话,或复用集群时未持久化依赖,导致Presidio所需的dataclass_transform(来自typing_extensions库)缺失。此外,默认安装的typing_extensions版本可能过低,不包含该模块。
解决方案
方案1:集群层面预安装依赖
- 进入Databricks集群配置的库选项卡
- 点击「安装新库」,选择PyPI源,依次安装以下包:
presidio_analyzerpresidio_anonymizerspacytyping_extensions>=4.1.0(确保包含dataclass_transform)
- 安装完成后重启集群,确保依赖在集群启动时即加载完成
方案2:修改Notebook安装命令,强制兼容版本
- 更新Notebook开头的安装逻辑,先升级
typing_extensions,再安装Presidio相关库:%pip install --upgrade typing_extensions>=4.1.0 %pip install presidio_analyzer presidio_anonymizer spacy - 若spacy模型在线下载不稳定,可提前将
en_core_web_lg上传至DBFS,直接加载本地模型:import spacy # 替换为DBFS上的模型路径 nlp = spacy.load("/dbfs/path/to/en_core_web_lg") - 可选:添加依赖检查逻辑,确保安装完成后再执行后续代码:
import importlib import time def check_dependency(): try: from typing_extensions import dataclass_transform return True except ImportError: return False # 循环检查直到依赖安装成功 while not check_dependency(): %pip install --upgrade typing_extensions>=4.1.0 time.sleep(5)
方案3:使用初始化脚本批量预安装
- 创建bash脚本
install_presidio_deps.sh,内容如下:#!/bin/bash pip install --upgrade typing_extensions>=4.1.0 pip install presidio_analyzer presidio_anonymizer spacy python -m spacy download en_core_web_lg - 将脚本上传至DBFS(如
dbfs:/databricks/init_scripts/install_presidio_deps.sh) - 在集群配置的高级选项->初始化脚本中添加该路径,重启集群后,每次启动都会自动安装依赖
内容的提问来源于stack exchange,提问作者RAH
相关产品推荐
相关产品推荐

