PySpark 在 S3 读取时挂起

PySpark hangs on S3 read

我想使用 PySpark(本地安装,而非 EMR)从 S3 读取文件。问题是它在读取时冻结,没有任何超时或错误。

版本:

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 路径可以在不到一秒的时间内下载文件。

通过一些实验(当你等待时,查询超时并打印错误,但是在很长时间之后)我想出了解决方案 - 设置就足够了:

.config("spark.hadoop.fs.s3a.endpoint", "s3.eu-central-1.amazonaws.com")

请注意 s3. 必须使用 ,而不是 s3a.,在我看到的某些地方建议使用。修改后,一切正常。