1

我在S3上有一个存储桶和一个SageMaker笔记本。我尝试访问存储在S3存储桶中的相当大的BDFEDF文件(1-2 GB) ,而不将它们上传到SageMaker卷。我还需要通过 URL 访问这些文件,因为EDF处理函数接收文件的绝对路径作为输入。mne.io.read_raw_edf

S3存储桶与Sagemaker Notebook Instance位于同一区域。与笔记本实例关联的 IAM 角色被授予访问S3存储桶的权限。

首先,我尝试使用this question中的方法,该方法描述了如何读取.csv文件。尽管就我而言,它与.csv文件配合得很好,但对文件却失败了.edf

import pandas as pd
from sagemaker import get_execution_role

role = get_execution_role()

bucket='my-bucket'
key = 'train.edf'
data_location = 's3://{}/{}'.format(bucket, key)

mne.io.read_raw_edf(data_location)

当我执行此代码时,我收到以下错误:

FileNotFoundError: [Errno 2] No such file or directory: '/home/ec2-user/SageMaker/s3:/my-bucket/train.edf'

在这里,我面临一个不是我做的路径堆叠。我不太明白为什么pd.read_csv通常读取路径,不像mne.io.read_raw_edf,它似乎堆叠了本地路径和服务器路径。

然后我找到了一个非常相似的问题的答案,但在堆叠路径方面遇到了非常相似的问题。

import boto3

bucket_location = boto3.client('s3').get_bucket_location(Bucket=bucket)
object_url = "https://s3-{0}.amazonaws.com/{1}/{2}".format(
    bucket_location['LocationConstraint'],
    bucket,
    key)
object_url
'https://s3-us-west-2.amazonaws.com/my-bucket/train.edf'

在这里我们可以看到路径是正常存储的。

mne.io.read_raw_edf(object_url)

当我执行此代码时,我收到以下错误:

FileNotFoundError: [Errno 2] No such file or directory: '/home/ec2-user/SageMaker/https:/s3-us-west-2.amazonaws.com/my-bucket/train.edf'

mne.io.read_raw_edf再次执行奇怪的堆叠。

最后,我尝试按照本文中描述的方法进行操作。

s3 = boto3.client("s3", 
                  region_name='us-west-2', 
                  aws_access_key_id='access_key_id', 
                  aws_secret_access_key='secret_access_key')

share_url = s3.generate_presigned_url(ClientMethod="get_object", 
                                      ExpiresIn=3600,
                                      Params={"Bucket": bucket, "Key": key})
share_url
'https://my-bucket.s3.amazonaws.com/train.edf?AWSAccessKeyId=access_key_id&Signature=signature&Expires=1616777253'

这条路似乎又恢复了正常。

mne.io.read_raw_edf(share_url)
NotImplementedError: Only EDF files are supported by read_raw_edf, got edf?awsaccesskeyid=access_key_id&
signature=signature&expires=1616777253

但在这里我得到了另一个奇怪mne.io.read_raw_edf的行为。不再堆叠,但路径被裁剪。

我认为这可能是mne.io.read_raw_edf问题本身,但我从未在亚马逊产品之外遇到过这样的事情。

通过 URL 访问BDFEDF文件是否有意义,或者将文件上传到SageMaker卷是否更好?如果这个问题看起来很幼稚,我深表歉意。我已经花了几天时间解决这个问题,但我需要尽快解决它,因为亚马逊在笔记本处于活动状态时每小时都会收取费用。

4

0 回答 0