【问题标题】:NameError: name 'dbutils' is not defined in pysparkNameError:名称 'dbutils' 未在 pyspark 中定义
【发布时间】:2018-11-21 15:13:42
【问题描述】:

我正在 databricks 云中运行 pyspark 作业。作为这项工作的一部分,我需要将一些 csv 文件写入 databricks 文件系统 (dbfs),并且我还需要使用一些 dbutils 本机命令,例如,

#mount azure blob to dbfs location
dbutils.fs.mount (source="...",mount_point="/mnt/...",extra_configs="{key:value}")

一旦文件被写入挂载目录,我也会尝试卸载。但是,当我直接在 pyspark 作业中使用 dbutils 时,它会因

而失败
NameError: name 'dbutils' is not defined

我应该导入任何包以在 pyspark 代码中使用 dbutils 吗?提前致谢。

【问题讨论】:

  • 你的代码是在 Python notebook 中还是你提交的是纯 Python 文件?
  • @MartinWeber - 我的代码在纯 python 文件中。

标签: pyspark-sql azure-blob-storage databricks


【解决方案1】:

是的! 你可以使用这个:

pip install DBUtils
import DBUtils

【讨论】:

    【解决方案2】:

    尝试使用这个:

    def get_dbutils(spark):
            try:
                from pyspark.dbutils import DBUtils
                dbutils = DBUtils(spark)
            except ImportError:
                import IPython
                dbutils = IPython.get_ipython().user_ns["dbutils"]
            return dbutils
    
    dbutils = get_dbutils(spark)
    

    【讨论】:

    • 我试过了,得到了这个错误:ModuleNotFoundError: No module named 'pyspark.dbutils', this from the except 子句:KeyError: 'dbutils'
    • 您是否在数据块上运行?外部不支持 dbutils
    • 谢谢!它位于 Azure 机器学习 VM 中。
    • 您好 Elisabetta,感谢您的回答。它也帮助了我很多。
    【解决方案3】:

    要以在本地和Azure Databricks clusters 中都可以使用的方式访问DBUtils 模块,请在Python 上使用以下get_dbutils()

    def get_dbutils(spark):
      try:
        from pyspark.dbutils import DBUtils
        dbutils = DBUtils(spark)
      except ImportError:
        import IPython
        dbutils = IPython.get_ipython().user_ns["dbutils"]
      return dbutils
    

    见:https://docs.microsoft.com/en-us/azure/databricks/dev-tools/databricks-connect

    【讨论】:

    • 虽然我很欣赏额外的解释和参考,但值得承认的是,代码建议与几个月前的 @Elisabetta 完全相同。
    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2020-04-20
    • 2018-01-24
    • 1970-01-01
    • 2021-04-15
    • 2019-01-26
    相关资源
    最近更新 更多