我有一個私有 Azure 存盤帳戶并在本地使用 PySpark,我想讀取一個 Blob。這是設定:
access_key = <storage-account-access-key>
spark = SparkSession.builder.master('local').appName('app').getOrCreate()
spark.conf.set("fs.azure.account.<storage-account-name>.blob.core.windows.net", access_key)
sc = spark.sparkContext
sc._conf.setAll([("fs.azure.account.key.<storage-acccount-name>.blob.core.windows.net", access_key)])
csv_raw = sc.textFile('wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/dir')
print(csv_raw.collect())
我使用 spark.sparkContext.textFile() 而不是 spark.read.load() 的原因是什么?在轉換為具有模式的資料幀之前,我需要將資料作為 RDD 讀入以進行一些資料清理/決議。這很奇怪,因為我可以使用 spark.read.load() 將資料作為資料幀讀入,所以 Spark Session 中的設定是正確的。如上面的代碼所示,我確實在 sparkContext 中手動設定了配置,以確保在運行 textFile 方法之前它會有這個引數。但是,在使用 spark.sparkContext.textFile() 時出現身份驗證錯誤:
“org.apache.hadoop.fs.azure.AzureException:在配置中找不到帳戶......的憑據,其容器......無法使用匿名憑據訪問。”
請假設所有 jar 檔案(hadoop-azure-3.3.0.jar、azure-storage-8.6.5.jar)都使用 spark-submit 正確加載,并注意我使用的是 Spark 版本 3.1.1。
先感謝您!
uj5u.com熱心網友回復:
對于 RDD API,您需要提供 Hadoop 配置 - 您現在使用的僅用于 Dataframe/Dataset API(請參閱Databricks 檔案作為參考)。
所以,而不是fs.azure.account.key.<storage-acccount-name>.blob.core.windows.net你需要添加spark.hadoop到它: spark.hadoop.fs.azure.account.key.<storage-acccount-name>.blob.core.windows.net
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319114.html
標籤:天蓝色 阿帕奇火花 火花 azure-blob-storage
