【问题标题】:Access databricks secret in custom python package imported into databricks notebook访问导入到databricks笔记本的自定义python包中的databricks秘密
【发布时间】:2021-07-09 14:04:18
【问题描述】:

我们有一个托管在私有 bitbucket 存储库上的自定义 python 包,可以通过 %pip install git+https//... 在任何 databricks 笔记本上安装。

其中一个函数执行许多操作,然后将数据推送到另一个需要凭据的位置。当函数运行时,例如在本地,这是通过配置文件处理的,但如果函数在数据块上运行,我们希望将这些凭据存储在数据块机密(范围)中。

但是,尝试做类似的事情

from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc = SparkContext.getOrCreate()
spark = SparkSession(sc)
from pyspark.dbutils import DBUtils
dbutils = DBUtils(spark)
pw = dbutils.secrets.get(scope = <SCOPE>, key = <KEY>) 

模块内(foo)不起作用并导致以下错误:

>>>import myPackage
>>>myPackage.foo.bar()

Py4JJavaError: An error occurred while calling o272.get.
    : java.lang.SecurityException: Accessing a secret from Databricks Connect requires
    a privileged secrets token. To obtain such a token, you can run the following
    in a Databricks workspace notebook:

鉴于我们可能希望使用计划的作业定期运行此功能,创建一个限时特权令牌似乎不是要走的路。

有没有办法让这项工作发挥作用,或者是否有我们应该遵循的替代/更好的方法?

【问题讨论】:

  • 您是否尝试在笔记本中执行该代码?
  • 嘿@alex,不,因为 dbutils 可以直接在笔记本中使用。但是,在运行上面的代码时,我确实遇到了同样的错误,因此导入后它也不起作用可能不足为奇
  • 如果您在笔记本中这样做,那么您不需要导入它...
  • 不过,我不是。我只是测试它来回答这个问题。这个想法是,这个通常只在本地使用的包也可以在 Databricks 中使用。

标签: python databricks azure-databricks


【解决方案1】:

对于将来可能遇到同样问题的其他人。在我的函数中使用此代码 sn-p 最终为我工作:

import IPython
dbutils = IPython.get_ipython().user_ns["dbutils"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2022-11-07
    • 2020-08-19
    • 2022-01-18
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多