You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:09:54