在PySpark中,有没有一种方法可以将凭据作为变量传递到spk.read中?

8wigbo56  于 2022-10-07  发布在  Spark
关注(0)|答案(3)|浏览(138)

Spark允许我们直接从Google BigQuery上阅读,如下所示:

df = spark.read.format("bigquery") 
  .option("credentialsFile", "googleKey.json") 
  .option("parentProject", "projectId") 
  .option("table", "project.table") 
  .load()

然而,将密钥保存在虚拟机上并不是一个好主意。我在凭据管理工具中将Google密钥安全地保存为JSON。密钥是按需读取的,并保存到名为googleKey的变量中。

可以将JSON传递给Speak.Read,或者将凭据作为字典传递吗?

hc2pp10m

hc2pp10m1#

另一个选项是credentials。来自Spark-BigQuery-Connector文档:

  • 如何在GCE/DataProc之外进行身份验证?*

凭证也可以作为参数或通过Spark运行时配置显式提供。它们应该作为Base64编码的字符串直接传入。

// Globally
spark.conf.set("credentials", "<SERVICE_ACCOUNT_JSON_IN_BASE64>")
// Per read/Write
spark.read.format("bigquery").option("credentials", "<SERVICE_ACCOUNT_JSON_IN_BASE64>")
yquaqz18

yquaqz182#

这更像是鸡和蛋的情况。如果您将凭据文件存储在秘密管理器中(希望这不是您的凭据管理器工具)。您将如何访问秘密管理器。为此,您可能需要密钥,您将在哪里存储该密钥。

为此,Azure创建了一个托管身份,通过它,两个不同的服务可以相互对话,而不需要显式提供任何密钥(凭据)。

oewdyzsn

oewdyzsn3#

如果您从Dataproc运行,则该节点具有内置服务帐户,您可以在创建群集时控制该帐户。在这种情况下,您不需要传递任何凭据/凭据文件选项。

如果您在另一个云或Prem上运行,您可以使用本地密钥管理器,或者实现连接器的AccessTokenProvider,它允许您完全定制凭据创建。

相关问题