Databricks Notebook导入Python文件时col未定义的问题求助
问题解决:NameError: name 'col' is not defined
核心原因
你在Notebook中导入了col,但**common.py模块自身的命名空间里没有col**——模块和调用它的Notebook是独立的命名空间,Notebook里的导入不会自动传递给模块。
修复步骤
修改/Workspace/Shared/Common/common.py,在文件顶部导入col:
from pyspark.sql.functions import col def cast_datatypes(df_target, df_source): cols = df_target.columns types = [f.dataType for f in df_target.schema.fields] for i, c in enumerate(cols): df_source = df_source.withColumn(c, col(c).cast(types[i])) df_source = df_source.select(cols) return df_source
Databricks模块化最佳实践
- 模块内部管理依赖:所有模块用到的库(比如
col、Spark相关函数)都要在模块文件内部导入,不要依赖调用方的导入。 - 正确添加模块路径:方法1中
sys.path.append应该添加模块所在的目录而非单个文件,修改为:import sys sys.path.append("/Workspace/Shared/Common") # 指向目录而非文件 from common import cast_datatypes - 分布式场景用
addPyFile:如果代码要在集群分布式节点运行(比如分布式UDF、Spark提交任务),用spark.sparkContext.addPyFile上传模块文件到所有节点,确保每个节点都能访问到模块。 - 统一共享目录:把通用模块放在
/Workspace/Shared下的固定目录,方便所有Notebook和集群访问,也便于版本管理。
内容的提问来源于stack exchange,提问作者Harshit Mahajan
相关产品推荐
相关产品推荐

