【发布时间】:2018-06-22 12:15:05
【问题描述】:
我正在尝试使用以下代码获取给定 s3 前缀中的最新文件夹
例如:
s3a://mybucket/data/timestamp=20180612165132/part1.parquete s3a://mybucket/data/timestamp=20180612165132/part2.parquete s3a://mybucket/data/timestamp=20180613165132/part1.parquete s3a://mybucket/data/timestamp=20180614165132/part1.parquete s3a://mybucket/data/timestamp=20180615165132/part1.parquete
我需要在数据文件夹下找到最新的时间戳文件夹..
keys = []
oldest = None
kwargs = {'Bucket': bucket_name, 'Prefix': key}
while True:
resp = get_conn().list_objects_v2(**kwargs)
for obj in resp['Contents']:
keys.append({'Key': obj['Key'], 'LastModified': obj['LastModified']})
try:
kwargs['ContinuationToken'] = resp['NextContinuationToken']
except KeyError:
break
logger.info("Got {0} keys".format(len(keys)))
for key in keys:
oldest = key['LastModified'] if oldest is None or key['LastModified'] < oldest else oldest
return oldest
问题是我在每个时间戳文件夹下有 100 个文件,在上面我获取创建的每个文件的时间戳,在每个时间戳文件夹下查找最旧的文件以了解时间戳文件夹的创建日期
我使用此代码作为 s3 将整个事物视为 1 个对象
s3a://mybucket/data/timestamp=20180612165132/part1.parquete
我无法获取时间戳文件夹的 LastModifiedDate
我觉得这非常昂贵,因为可能有数百个时间戳文件夹,每个文件夹有 100 个文件..
有没有最好的方法来实现这一点?
【问题讨论】:
-
侧节点:文件夹实际上并不存在于 Amazon S3 中。它们“似乎”在那里,但可以在任何路径中创建对象,一旦删除,“文件夹”就会消失。一些系统会创建与文件夹同名的零长度文件,以强制文件夹“出现”。但是,此类文件的修改日期并不代表文件夹内容的修改日期(因为该文件夹不存在!)。
-
@JohnRotenstein 我明白没有文件夹的概念一切都是对象但是如何在我上面提到的 s3 位置列表中找到最新的时间戳文件夹?此外,如果我分别创建时间戳文件夹和文件夹内的文件,文件夹和文件被视为单独的对象,并且我能够在时间戳文件夹上获取 LastModifiedDate 但是当我同时创建它们时,除了上述之外,我没有其他方法
-
您是指作为路径名称一部分的时间戳,还是在文件夹级别寻找一个神奇的时间戳,该时间戳在“文件夹”的内容更改时更新?
-
我指的是作为路径名称一部分的时间戳,但总之我想知道所有时间戳文件夹中最新创建的文件夹,因为在我的情况下没有文件夹内的内容更新与内容一起创建一次
-
@JohnRotenstein 要添加更多上下文,我的 Spark 应用程序之一在 S3 中创建了此文件夹结构,我还有另一个应用程序需要获取 spark 应用程序生成的最新数据。如果您需要更多信息,请知道
标签: python-3.x amazon-s3 boto3