我正试图根据文件名的关键字搜索从Glue中的s3 bucket中读取文件。例如,如果文件名包含";文件";。这是我目前用来从s3 bucket中读取给定文件的代码。
File1_node = glueContext.create_dynamic_frame.from_options(
format_options={"quoteChar": '"', "withHeader": True, "separator": ","},
connection_type="s3",
format="csv",
connection_options={
"paths": [
"s3:// env-files/data/material/filename1.csv"
],
"recurse": True,
},
transformation_ctx=" File1_node",
)
File1= File1_node.toDF()
我想通过使用关键字搜索来动态读取文件。例如,如果文件名包含";文件";并且存在一个名为"的文件;文件名1";那么应该读取该文件。如果有多个文件包含相同的关键字,则将它们全部追加。请告诉我是否有这样做。谢谢!
您可以使用boto3 s3 list_objects_v2((来完成此操作。
import boto3
from typing import List
s3_client = boto3.client('s3')
def get_all_filepaths(filename_filter: str, bucket: str, prefix: str) -> List[str]:
response = s3_client.list_objects_v2(Bucket=bucket, Prefix=prefix)
return [key['Key'] for key in response['Contents'] if filename_filter in key['Key']]
File1_node = glueContext.create_dynamic_frame.from_options(
format_options={"quoteChar": '"', "withHeader": True, "separator": ","},
connection_type="s3",
format="csv",
connection_options={
"paths": get_all_filepaths(filename_filter, bucket, prefix),
"recurse": True,
},
transformation_ctx=" File1_node",
)
File1= File1_node.toDF()
使用此选项,您可以获得符合条件的路径列表。我还没有运行这个,但我认为你也应该附加s3://,请检查一下。此外,如果有1000多个对象,则必须实现逻辑,以便继续使用NextContinuationToken
从函数调用的响应中获取数据。
希望这能有所帮助!