使用S3FS访问TFX管道中的S3 bucket对象

2024-06-25 06:39:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个TFX管道,其中包含从S3存储桶输入的图像。在TF转换组件步骤中,我尝试读取一系列图像,这些图像的URL存储在TFX的SparseTensor格式中。我正在尝试使用S3FS Python模块来实现这一点,因为我已经在管道的其他组件中使用了S3FS模块,并且听说同时使用Boto3和S3FS可能会导致问题(我认为这与问题无关)

无论如何,我已经建立了与S3存储桶的连接,并且正在尝试读取图像。以下是我的代码(或者至少是我认为与问题密切相关的部分代码):

  s3 = s3fs.S3FileSystem()

  with s3.open(str(inputs[key]), 'rb') as f:
    for key in CV_FEATURES:
      img = np.array(Image.open(io.BytesIO(f.read())))
      img = tf.image.rgb_to_grayscale(img)
      img = tf.divide(img, 255)
      img = tf.image.resize_with_pad(img, 224, 224)
      outputs[_fill_in_missing(key)] = img

  s3.clear_instance_cache()

运行此命令时,我看到了一条标准错误消息,用于尝试访问包含无效字符的存储桶:

ParamValidationError:参数验证失败: “bucket名称必须匹配regex“^[a-zA-zA-Z0-9-12}:访问点[/::[a-zA-Z0-9..[U5}{1255}}$”或者是一个ARN匹配regex的ARN“^ARN:(aws)。:(s3>:(s3)3.3.3.3.3.3.3.对象Lamb数据:3.3.3.3.3.3.对象λ.对象对象对象Lamb达::::[a-3.3.3.3.3.3.3.3.3.3.3.3.对象对象对象对象λ.3.对象对象对象λ-3.对象λ.对象λ.3.3.对象λ.3.对象lam数据(3.对象:3.对象:3.对象:3.对象:3.数据(a-3)5.3.3.3.3.3.3.3/:]访问点[/:][a-zA-Z0-9-]{1,63}$“

错误表明问题出在with s3.open(str(inputs[key]), 'rb') as f:行上,因此我需要正确表示S3 URL。URL以bucket_name\key\file.jpg格式存储在原始CSV数据集中名为image\u path的列中(在上述代码中表示为inputs[key]之前转换为SparseTensor)

我认为问题不在于Sparstensor格式,而在于URL


Tags: 数据对象key代码图像urlimgs3