Azure Synapse Spark作业定义上传Python引用文件目录报模块未找到错误
Azure Synapse Spark作业传入Python依赖目录触发ModuleNotFoundError的解决方法
你使用abfss://[data lake中的目录路径]/*的路径格式无法正确传入整个Python目录,Synapse Spark的参考文件配置不支持通配符批量保留目录结构上传,匹配到的文件会被平铺到工作节点的工作目录中,原有模块的层级结构丢失,所以触发导入报错。
解决步骤如下:
- 将需要引用的整个Python目录打包为zip格式,比如依赖目录名称为
my_module,打包后得到my_module.zip,确保zip包打开后根目录直接是my_module文件夹,不要嵌套多余的外层目录 - 将打包好的zip文件上传到ADLS Gen2的指定路径,示例完整路径格式如下:
abfss://<容器名称>@<存储账户名称>.dfs.core.chinacloudapi.cn/<自定义存储路径>/my_module.zip - 在Synapse Spark作业定义的配置 > 参考文件栏,填入上述zip包的完整ABFSS路径;如果通过代码提交作业,可直接在Spark配置中添加如下参数:
spark.submit.pyFiles=abfss://<容器名称>@<存储账户名称>.dfs.core.chinacloudapi.cn/<自定义存储路径>/my_module.zip - 在主Python运行文件的头部,添加如下代码将zip包加入Python模块检索路径:
完成配置后即可正常导入对应模块,比如import sys sys.path.insert(0, "my_module.zip")from my_module.tool import func这类导入语句可以正常执行。
若无需保留目录结构,也可以单独上传所有Python依赖文件到参考文件列表,直接按文件名导入即可,适合依赖文件数量少的场景。
内容的提问来源于stack exchange,提问作者ChingamChaapu
相关产品推荐
相关产品推荐

