簡體   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