首页 > 解决方案 > EMR 到 S3 文件写入给我错误 java.net.URISyntaxException:绝对 URI 中的相对路径

问题描述

我正在从 EMR 集群运行 pyspark 应用程序。我有两个桶 - 一个输入数据桶user-data-input和一个 o/p 数据桶来存储脚本结果movie-stats。我用于写入输出存储桶的代码

final_df = ratings.join(movie_title, 'movieId', 'left') \
    .select('movieId', 'title', 'release_year', 'avg_rating', 'ratings_count', 'distinct_viewers') \
    .coalesce(1)
final_df.write.csv('s3://movie-stats', header=True, mode='overwrite')

我的电影统计数据桶政策如下。

{
    "Version": "2012-10-17",
    "Id": "Policy1606478144619",
    "Statement": [
        {
            "Sid": "Stmt1606478053538",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::movie-stats/*",
                "arn:aws:s3:::movie-stats"
            ]
        }
    ]
}

我的脚本可以从 S3 存储桶读取数据并运行分析,但在尝试写入 S3 时抛出错误

java.net.URISyntaxException: Relative path in absolute URI: s3://movie-stats.spark-staging-f2e2ecd7-5c42-483a-888c-6a6295b76c0d

我不明白这个错误,也没有从谷歌那里找到太多了解应该如何为输出提及 S3 路径。

标签: amazon-s3amazon-emr

解决方案


Ypu 已经解决了,但是根目录很特别,它们永远不会消失。

为文件系统编写的应用程序从不期望使用 / 作为它们的输出,因此不能很好地将它用作对象存储输出的根。


推荐阅读