我在我们的 Databricks 帐户中注册了一个秘密范围,其中详细说明了登录参数。
secret_scope = "My-Secret"
params = ["user", "password"]
conn_params = {param: dbutils.secrets.get(scope=secret, key=param) for param in params}
conn_params 打印的结果输出是:
{'用户':'[已编辑]','密码':'[已编辑]'}
一切都很好,花花公子。如果我使用
conn_params
来实例化与库的连接,它允许我从数据源(如 RDBMS 等)检索信息,则连接工作正常。
但是当我使用此连接信息创建 Spark DataFrame 时,问题就来了。 生成的 DataFrame 也对其所有数据进行了编辑,这使其无法使用。
# Something like...
with someConn(**conn_params) as conn:
# do something
...
result = df
df.show()
如果我不使用秘密作用域,并从字面上声明:
conn_params = {'user': 'me', 'password': 'pw'}
并使用文字键:值对,我得到了一个未编辑和可用的 DataFrame。
有什么办法可以解决这个问题?关于这方面的官方文档非常薄弱。
databricks 官方文档
p.s:现在使用 Pyspark,但如果只能在 Scala for Databricks 上工作,也欢迎这些想法
所以,事实证明,唯一被编辑的是调用秘密范围的 spark 会话 的输出(如 print()、show()、display())。
如果我保存到表中就可以了,在新的或其他 spark 会话中,只要您有访问权限,它就可用。
如果您在编程时试图查看您的工作,这会有点痛苦,但对于 PRD 目的,它似乎工作正常。
仍然希望文档对此有一点清楚。当 Databricks 第一次引入秘密作用域时,我不得不从他们写的一些技术博客文章中得到这个。
Step it up Databricks