始终从 spark 中的 s3 存储桶读取最新文件夹



下面是我的 s3 存储桶文件夹结构的样子,

s3://s3bucket/folder1/morefolders/$folder_which_I_want_to_pick_latest/

$folder_which_I_want_to_pick_latest- 对于传入的每个新文件夹,此文件夹始终可以有一个递增的数字,例如randomnumber_timestamp

有没有办法通过始终从 Scala 中的 Spark 读取 s3 中的最新文件夹来自动化此过程

处理这种"行为"的最佳方法是将数据构建为分区方法,例如year=2020/month=02/day=12,其中每个分区都是一个文件夹(aws-console(。通过这种方式,您可以使用spark上的简单filter来确定最新的。(更多信息: https://www.datio.com/iaas/understanding-the-data-partitioning-technique/(

但是,如果您不被允许重新构建存储桶,那么如果您没有可用于计算最新文件夹的特定标识符和/或引用,则解决方案可能会很昂贵。请记住,在s3中,您没有文件夹的概念,您只有一个object key(这是您看到/的地方,aws console可以可视化为文件夹(,因此,要计算$folder_which_I_want_to_pick_latest中最高的增量 id,最终将签入存储桶中存储的所有对象以及 s3 中的每个对象请求成本。更多信息: https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html.

这里有一个选项。考虑编写一个 Lambda 函数,该函数可以按计划运行(例如,如果您知道上传总是在下午 1 点到 4 点之间发生(,或者由 S3 对象上传触发(因此上传到folder1/morefolders/的每个对象都会发生这种情况(。

Lambda 会将 S3 对象前缀的相关部分写入简单的 DynamoDB 表中。需要知道最新前缀的客户端将从 DynamoDB 读取该前缀。

最新更新