首页 > 解决方案 > com.amazonaws.AmazonClientException:无法执行 HTTP 请求:不知道这样的主机(spark-tunes.s3a.ap-south-1.amazonaws.com)

问题描述

我正在尝试通过pycharm以本地模式从spark中读取存储在S3存储桶中的json文件。但我收到以下错误消息:

“py4j.protocol.Py4JJavaError:调用 o37.json 时出错。:com.amazonaws.AmazonClientException:无法执行 HTTP 请求:不知道这样的主机(spark-tunes.s3a.ap-south-1.amazonaws.com )"

(spark-tunes 是我的 S3 存储桶名称)。

下面是我执行的代码。请帮助我知道我是否遗漏了什么。

spark = SparkSession.builder.appName('DF Read').config('spark.master', 'local').getOrCreate()

spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", "access_key")
spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "secret_key")

spark._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3a.ap-south-1.amazonaws.com")
spark._jsc.hadoopConfiguration().set("com.amazonaws.services.s3a.enableV4", "true")
spark._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")

df = spark.read.json("s3a://bucket-name/folder_name/*.json")

df.show(5)

标签: pythondataframeamazon-s3pyspark

解决方案


尝试将 fs.s3a.path.style.access 设置为 false,而不是将存储桶名称作为主机的前缀,aws s3 客户端将使用端点下的路径

另外:删除 fs.s3a.impl 行。那是通过堆栈溢出示例传递的迷信。这不是必需的。真的。


推荐阅读