在 Databricks Repos 的另一个文件中导入模块如何工作?

How does importing a module in another file in a Databricks Repos work?

我正在使用数据块存储库

我有两个文件, 我在另一个名为 folder1

的文件夹中名为 func.py 的文件中的函数
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)

这returns一个错误

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 docs)。

所以你的 func.py 应该在某处包含导入 - 在函数本身中不是必需的,它可以在文件的 top-level 中:

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")))

P.S。您也可能不需要 sys.path.append("..") - Databricks Repos 会自动将存储库的根目录添加到 sys.path.