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中您可以限制的对象。这张照片只是一个例子,显示它会给你桶里所有的东西。如果你对最后一个物体一无所知,我不确定你怎么会知道你在寻找什么物体。