gpt4 book ai didi

amazon-s3 - 如何将多个 gzip 压缩文件从 S3 读取到单个 RDD 中?

转载 作者:行者123 更新时间:2023-12-03 06:21:44 28 4
gpt4 key购买 nike

我在 S3 上存储了许多 gzip 压缩文件,这些文件按项目和每天的小时进行组织,文件路径的模式如下:

s3://<bucket>/project1/20141201/logtype1/logtype1.0000.gz
s3://<bucket>/project1/20141201/logtype1/logtype1.0100.gz
....
s3://<bucket>/project1/20141201/logtype1/logtype1.2300.gz

由于需要每天分析数据,因此我必须下载并解压属于特定日期的文件,然后将内容组装为单个 RDD。

应该有多种方法可以做到这一点,但我想知道 Spark 的最佳实践。

提前致谢。

最佳答案

Spark 用于访问 S3 的底层 Hadoop API 允许您使用 glob expression 指定输入文件.

来自the Spark docs :

All of Spark’s file-based input methods, including textFile, support running on directories, compressed files, and wildcards as well. For example, you can use textFile("/my/directory"), textFile("/my/directory/*.txt"), and textFile("/my/directory/*.gz").

因此,在您的情况下,您应该能够使用类似以下内容将所有这些文件作为单个 RDD 打开:

rdd = sc.textFile("s3://bucket/project1/20141201/logtype1/logtype1.*.gz")

郑重声明一下,您还可以使用逗号分隔列表指定文件,甚至可以将其与 *? 通配符混合使用。

例如:

rdd = sc.textFile("s3://bucket/201412??/*/*.gz,s3://bucket/random-file.txt")

简单来说,它的作用是:

  • * 匹配所有字符串,因此在这种情况下,201412?? 下所有文件夹中的所有 gz 文件都将被加载。<
  • ? 匹配单个字符,因此 201412?? 将涵盖 2014 年 12 月的所有日期,例如 2014120120141202 等等。
  • , 可让您一次将单独的文件加载到同一个 RDD 中,例如本例中的 random-file.txt

有关 S3 路径的适当 URL 方案的一些注意事项:

  • 如果您在 EMR 上运行 Spark,the correct URL scheme is s3:// .
  • 如果您运行的是基于 Hadoop 2.7 或更高版本构建的开源 Spark(即没有专有的 Amazon 库),则 s3a:// 是最佳选择。
  • s3n:// has been deprecated在开源方面支持 s3a://。如果您在 Hadoop 2.6 或更早版本上运行 Spark,则应仅使用 s3n://

关于amazon-s3 - 如何将多个 gzip 压缩文件从 S3 读取到单个 RDD 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27477730/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com