【发布时间】: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