繁体   English   中英

在 PySpark 中,有没有办法将凭据作为变量传递到 spark.read 中?

[英]In PySpark, is there a way to pass credentials as variables into spark.read?

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,或者将凭据作为字典传递?

另一个选项是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>")

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

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

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

如果您在另一个云或本地运行,您可以使用本地秘密管理器,或实施连接器的 AccessTokenProvider,它允许您完全自定义凭据创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM