我想使用 PySpark(本地安裝,而不是 EMR)從 S3 讀取檔案。問題是它在讀取時凍結,沒有任何超時或錯誤。
版本:
- PySpark 3.2.2
- Hadoop 3.3.1
- Hadoop-AWS 3.3.1 .jar
- AWS Java SDK 捆綁包 1.12.136 .jar(也嘗試了 1.11.901)
JAR 檔案直接放在SPARK_HOME/jars目錄中,所以我不需要在這里單獨指定它們(這種方法適用于我的其他具有其他 JAR 依賴項的 Spark 作業)。
我的 PySpark 代碼:
from pyspark.sql import SparkSession
# filled in code
aws_access_key_id = ""
aws_secret_access_key = ""
spark = (
SparkSession
.builder
.appName("Test S3 app")
.config("spark.hadoop.fs.s3a.access.key", aws_access_key_id)
.config("spark.hadoop.fs.s3a.secret.key", aws_secret_access_key)
.config("spark.hadoop.fs.s3a.endpoint", "eu-central-1.amazonaws.com")
.getOrCreate()
)
# here the execution hangs
df = spark.read.parquet("s3a://bucket/file.parquet")
df.show()
我能用這個做什么?我見過這個問題,但那里沒有解決方案。
使用與 boto3 相同的憑據和 S3 路徑可以在不到一秒的時間內下載檔案。
uj5u.com熱心網友回復:
通過一些實驗(當你等待時,查詢超時并列印錯誤,但經過很長時間)我想出了解決方案 - 設定就足夠了:
.config("spark.hadoop.fs.s3a.endpoint", "s3.eu-central-1.amazonaws.com")
請注意,s3. 在s3a.我見過的某些地方,必須使用,而不是建議。通過此修改,一切正常。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410849.html
標籤:
