【问题标题】:Always read latest folder from s3 bucket in spark始终从 spark 的 s3 存储桶中读取最新文件夹
【发布时间】:2020-01-27 22:02:59
【问题描述】:

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

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

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

有没有一种方法可以通过始终从 Scala 中的 spark 读取 s3 中的最新文件夹来自动执行此过程

【问题讨论】:

标签: scala amazon-web-services apache-spark amazon-s3


【解决方案1】:

处理这种“行为”的最佳方法是将数据构造为分区方法,例如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

【讨论】:

    【解决方案2】:

    这是一种选择。考虑编写一个 Lambda 函数,该函数要么按计划运行(假设您知道上传总是在下午 1 点到 4 点之间发生),要么由 S3 对象上传触发(因此对于上传到 folder1/morefolders/ 的每个对象都会发生这种情况)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      相关资源
      最近更新 更多