Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 动态读取更改文件名密钥_Amazon Web Services_Amazon S3_Boto3_Amazon Sagemaker - Fatal编程技术网

Amazon web services 动态读取更改文件名密钥

Amazon web services 动态读取更改文件名密钥,amazon-web-services,amazon-s3,boto3,amazon-sagemaker,Amazon Web Services,Amazon S3,Boto3,Amazon Sagemaker,我有parquet文件,这些文件是通过spark生成的,s3中的文件名(键)将在ETL作业后始终更改。这是我用来通过sagemaker中的boto3读取parquet文件的代码。正在寻找一种动态读取S3文件名(键)的方法,因为硬编码键会导致读取失败,因为它每次都会更改。如何做到这一点?谢谢 filename=“数据集/randomnumbergenerator.parquet” bucketName=“bucket name” buffer=io.BytesIO() 客户端=两个资源(“s3”)

我有
parquet
文件,这些文件是通过
spark
生成的,
s3
中的文件名(键)将在ETL作业后始终更改。这是我用来通过
sagemaker
中的
boto3
读取
parquet
文件的代码。正在寻找一种动态读取
S3
文件名(键)的方法,因为硬编码键会导致读取失败,因为它每次都会更改。如何做到这一点?谢谢

filename=“数据集/randomnumbergenerator.parquet”
bucketName=“bucket name”
buffer=io.BytesIO()
客户端=两个资源(“s3”)
obj=client.Object(bucketName,文件名)
obj.download_fileobj(缓冲区)
df=pd.read_拼花地板(缓冲区)
导入fnmatch
filename=“datasets/randomnumbergenerator.parquet”
bucketName=“bucket name”
buffer=io.BytesIO()
客户端=两个资源(“s3”)
bucket=client.bucket(bucketName)
对于bucket.objects.all()中的bucket\u对象:
如果fnmatch.fnmatch(bucket_object.key,'dataset/*.parquet'):
打印(bucket_object.key)
您需要从bucket中获取对象列表,然后可以遍历这些对象以找到您要查找的对象

更新:
您可以在循环中使用fnmatch来限制您对该文件的了解(当前代码的假设是它位于名为“dataset”的文件夹中,类型为parquet)。这将返回bucket中与之匹配的所有对象。

此解决方案适用于我

导入boto3
作为pd进口熊猫
输入io
导入pyarrow
进口快速拼花地板
def动态读取文件名密钥(bucket,前缀=“”,后缀=“”):
s3=boto3\
.client(“s3”\
region\u name=os.environ['AWS\u DEFAULT\u region']\
aws_access_key_id=os.environ['aws_access_key_id']\
aws\u secret\u access\u key=os.environ['aws\u secret\u access\u key']
kwargs={'Bucket':Bucket}
如果isinstance(前缀,str):
kwargs['Prefix']=前缀
resp=s3\
.list_objects_v2(**kwargs)
对于resp[‘内容’]中的obj:
key=obj['key']
如果key.startswith(前缀)和key.endswith(后缀):
返回键
filename=“”.join(动态读取文件名密钥中的i表示i)\
(bucket=“我的bucket”\
prefix=“dataset/”\
后缀=“.parquet”))
bucket=“我的桶”
def拼花地板\读取\文件名\密钥(桶,文件名):
客户端=boto3\
.资源(“s3”\
region\u name=os.environ['AWS\u DEFAULT\u region']\
aws_access_key_id=os.environ['aws_access_key_id']\
aws\u secret\u access\u key=os.environ['aws\u secret\u access\u key']
buffer=io.BytesIO()
obj=client.Object(bucket,文件名)
obj.download_fileobj(缓冲区)
df=pd.read_拼花地板(缓冲区)
返回df
df=拼花地板\读取\文件名\键(桶,文件名)

这将打印bucket中的每个前缀,从而生成许多对象。。。它并不能解决动态读取一个不断变化的密钥的能力——假设您对该密钥有所了解,并且查看bucket中您可以限制的对象。这张照片只是一个例子,显示它会给你桶里所有的东西。如果你对最后一个物体一无所知,我不确定你怎么会知道你在寻找什么物体。