首页 > 解决方案 > ModuleNotFoundError:在数据块中的作业集群上运行 multiple.py 文件/笔记本时没有名为“pyspark.dbutils”的模块

问题描述

我在 TravisCI、MlFlow 和 Databricks 环境中工作,其中 .tavis.yml 位于 git master 分支并检测.py文件中的任何更改,每当它更新时,它将运行 mlflow 命令以在 databricks 环境中运行 .py 文件。我的 MLProject 文件如下所示:

name: mercury_cltv_lib
conda_env: conda-env.yml


entry_points:    
  main:
    command: "python3 run-multiple-notebooks.py"

工作流程如下: TravisCI 检测到 master 分支中的变化——> 触发构建,它将运行 MLFlow 命令,它会在 databricks 中启动一个作业集群以从 repo 运行 .py 文件。

它适用于一个 .py 文件,但是当我尝试使用 dbutils 运行多个笔记本时,它正在抛出

  File "run-multiple-notebooks.py", line 3, in <module>
    from pyspark.dbutils import DBUtils
ModuleNotFoundError: No module named 'pyspark.dbutils'

请在 run-multiple-notebooks.py 的相关代码部分下方找到

  def get_spark_session():
    from pyspark.sql import SparkSession
    return SparkSession.builder.getOrCreate()

  def get_dbutils(self, spark = None):
    try:
        if spark == None:
            spark = spark

        from pyspark.dbutils import DBUtils #error line
        dbutils = DBUtils(spark) #error line
    except ImportError:
        import IPython
        dbutils = IPython.get_ipython().user_ns["dbutils"]
    return dbutils

  def submitNotebook(notebook):
    print("Running notebook %s" % notebook.path)
    spark = get_spark_session()
    dbutils = get_dbutils(spark)

我尝试了所有选项并尝试了

https://stackoverflow.com/questions/61546680/modulenotfounderror-no-module-named-pyspark-dbutils

也是。它不工作:(

有人可以建议在作业集群中运行 .py 时是否可以解决上述错误。我的代码在 databricks 本地笔记本中运行良好,但使用 TravisCI 从外部运行并且 MLFlow 无法正常工作,这是管道自动化的必要条件。

标签: pysparktravis-cidatabricksmlflowdbutils

解决方案


推荐阅读