我正在使用databricks repos
我有两个文件,我的函数在一个名为function .py的文件中在另一个名为folder1
的文件夹中def lower_events(df):
return df.withColumn("event",f.lower(f.col("event")))
我调用lower_events的主笔记本
import pyspark.sql.functions as f
from pyspark.sql.functions import udf, col, lower
import sys
sys.path.append("..")
from folder1 import func
df_clean = func.lower_events(df)
返回一个错误
NameError: name 'f' is not defined
但这是工作
def lower_events(df):
import pyspark.sql.functions as f
from pyspark.sql.functions import col, when
return df.withColumn("event",f.lower(f.col("event")))
这个错误是正确的,因为每个单独的Python模块都有自己的导入,并且不引用主模块或其他模块中的导入(更多详细信息请参阅Python文档)。
所以你的func.py
应该在某个地方包含导入——不一定在函数本身中,它可以在文件的顶层:
import pyspark.sql.functions as f
from pyspark.sql.functions import col, when
def lower_events(df):
return df.withColumn("event",f.lower(f.col("event")))
注:你也可能不需要sys.path.append("..")
- Databricks Repos会自动添加存储库的根目录到sys.path
。