获取 json 文件路径时,AWS Glue 作业中出现 FileNotFound 错误

问题描述 投票:0回答:1

我正在使用 aws Glue 作业在 S3 位置调用 python 脚本。我能够使用 boto3 从本地计算机创建作业并通过 python 代码运行它。 S3 中的脚本文件具有以下代码,如下所示:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job


from pyspark.sql import SparkSession
import json


args = getResolvedOptions(sys.argv, ["JOB_NAME", "RAW_DATA", "MAPPING_JSON"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args)

input_csv = args['RAW_DATA']

df = spark.read.csv(input_csv, header=True)
df.show()

mapping_json_path = args['MAPPING_JSON']
with open(mapping_json_path) as json_mapping_file:
    json_mapping_data = json.load(json_mapping_file)

这里,作业参数是 s3 文件路径,并且这两个文件都存在于同一个 S3 存储桶中。

RAW_DATA = 's3://存储桶名称/data/raw/raw_data.csv' MAPPING_JSON = 's3://bucket-name/configs/mapping.json'

问题是,我能够毫无错误地读取 csv 文件,但对于 json 文件,我得到

"No such file or directory: 's3://bucket-name/configs/mapping.json'"

"Stack Trace": [
        {
            "Declaring Class": "<module>",
            "Method Name": "with open(mapping_json_path) as json_mapping_file:",
            "File Name": "/tmp/script.py",
            "Line Number": 29
        }
    ],
    "Last Executed Line number": 29,
    "script": "script.py"

最初我认为权限问题在 stackoverflow 中看到了几个类似的问题,其中角色分配给了作业,但 csv 文件没有被读取的问题。但我仍然提供了对分配的角色的 S3admin 访问权限,但出现同样的错误。 也尝试将 json 文件放在不同的文件夹中(这没有意义)。 注意:S3 存储桶具有公共访问权限,并且角色中的策略将“s3:PutObject”、“s3:GetObject”作为允许对整个存储桶执行的操作。

如有任何帮助,我们将不胜感激。

amazon-web-services aws-glue
1个回答
0
投票

更换:

with open(mapping_json_path) as json_mapping_file:
    json_mapping_data = json.load(json_mapping_file)

与:

mapping_df = spark.read.json(mapping_json_path, header=True)
json_mapping_data = mapping_df.toJSON()

如果你想要它作为 json 数组,你可以这样做:

json_mapping_data = mapping_df.toJSON().collect()

要读取多行json文件,请使用:

mapping_df = spark.read.option("multiline","true").json(mapping_json_path, header=True)
© www.soinside.com 2019 - 2024. All rights reserved.