Azure Databricks Notebook 在包中时无法找到“dbutils”

Posted

技术标签:

【中文标题】Azure Databricks Notebook 在包中时无法找到“dbutils”【英文标题】:Azure Databricks Notebook unable to find "dbutils" when it is in package 【发布时间】:2019-05-25 12:19:49 【问题描述】:

我正在创建一个用于与 azure 存储 blob 通信的类,它工作正常,但如果我尝试将这个类放入包中,它会给我一个错误 “错误:未找到:值 dbutils”强>。如果我删除类上方的 "package Libraries.Custom",它工作正常。

我正在使用 Scala 在 azure databricks notebook 中创建一个类。谁能帮帮我。代码如下:

类代码

package Libraries.Custom

import org.apache.spark.sql._

class BlobContext 
  // Basic Azure Storage Configurations
  val blob_account_name = "REPLACE_BY_ACTUAL_VALUE"
  val blob_account_access_key = "REPLACE_BY_ACTUAL_VALUE"
  val blob_container_name = "REPLACE_BY_ACTUAL_VALUE"
  val blob_server = s"REPLACE_BY_ACTUAL_VALUE"
  val blob_wasbs = s"REPLACE_BY_ACTUAL_VALUE"

  val spark = SparkSession
    .builder()
    .appName("Path SOM")
    .master("local[*]")
    .config("spark.ui.enabled", "false")
    .getOrCreate()

  def SetConfigurations 
    spark.conf.set(blob_server, blob_account_access_key)
  

  def ReadData(fileName: String, fileType: String): DataFrame = 
    SetConfigurations
    val dataFrame = spark.read.format(fileType).option("header", "true").load(s"$blob_wasbs$fileName.$fileType")    
    return dataFrame
  

  def WriteData(fileDataFrame: DataFrame, fileName: String, fileType: String) 
    val absTempFilePath = s"$blob_wasbsSPARK_NEW_$fileName.temp"
    val absFilePath = s"$blob_wasbsSPARK_NEW_$fileName.$fileType"

    fileDataFrame.repartition(1).write.format(fileType).mode("overwrite").option("header", "true").option("inferSchema", "true").option("delimiter", ",").csv(absTempFilePath)

    val partition_path = dbutils.fs.ls(absTempFilePath + "/").filter(file=>file.name.endsWith(".csv"))(0).path
    dbutils.fs.cp(partition_path, absFilePath)
    dbutils.fs.rm(absTempFilePath,recurse=true)
        

错误

<notebook>:37: error: not found: value dbutils
    val partition_path = dbutils.fs.ls(absTempFilePath + "/").filter(file=>file.name.endsWith(".csv"))(0).path
                         ^
<notebook>:38: error: not found: value dbutils
    dbutils.fs.cp(partition_path, absFilePath)
    ^
<notebook>:39: error: not found: value dbutils
    dbutils.fs.rm(absTempFilePath,recurse=true)
    ^
<notebook>:39: error: not found: value recurse
    dbutils.fs.rm(absTempFilePath,recurse=true)
                                  ^
Compilation failed.

【问题讨论】:

【参考方案1】:

尝试添加此导入:

import com.databricks.dbutils_v1.DBUtilsHolder.dbutils

【讨论】:

它有效,但这是确切的解决方案吗?

以上是关于Azure Databricks Notebook 在包中时无法找到“dbutils”的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Databricks Notebook 上检索群集不活动时间

来自 Databricks Notebook 的 COSMOS DB 写入问题

如何使用 python 从 azure databricks notebook 连接到本地 Windows 服务器?

如何在 Azure 数据工厂的 Databricks 上运行 .Net spark 作业?

python Databricks_notebook_run

如何动态获取 Databricks Notebook 的路径?