如何使用 http 请求将多个 gzip 文件从 S3 读取到单个 RDD 中?
How to read multiple gzipped files from S3 into a single RDD with http request?
我必须像这样下载许多存储在 S3 上的 gzip 文件:
crawl-data/CC-MAIN-2018-43/segments/1539583508988.18/robotstxt/CC-MAIN-20181015080248-20181015101748-00000.warc.gz
crawl-data/CC-MAIN-2018-43/segments/1539583508988.18/robotstxt/CC-MAIN-20181015080248-20181015101748-00001.warc.gz
要下载它们,您必须添加前缀 https://commoncrawl.s3.amazonaws.com/
我必须下载并解压文件,然后assemble将内容作为单个 RDD。
与此类似的内容:
JavaRDD<String> text =
sc.textFile("https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2018-43/segments/1539583508988.18/robotstxt/CC-MAIN-20181015080248-20181015101748-00000.warc.gz");
我想用 spark 做这个代码:
for (String key : keys) {
object = s3.getObject(new GetObjectRequest(bucketName, key));
gzipStream = new GZIPInputStream(object.getObjectContent());
decoder = new InputStreamReader(gzipStream);
buffered = new BufferedReader(decoder);
sitemaps = new ArrayList<>();
String line = buffered.readLine();
while (line != null) {
if (line.matches("Sitemap:.*")) {
sitemaps.add(line);
}
line = buffered.readLine();
}
要从 S3 读取内容,您可以这样做:
sc.textFiles("s3n://path/to/dir")
如果 dir
包含您的 gzip 文件,它们将被压缩并合并到一个 RDD 中。如果你的文件不是直接在这样的目录的根目录下:
/root
/a
f1.gz
f2.gz
/b
f3.gz
甚至这个:
/root
f3.gz
/a
f1.gz
f2.gz
那么你应该像这样使用通配符 sc.textFiles("s3n://path/to/dir/*")
并且 spark 将递归地查找 dir
及其子目录中的文件。
不过要注意 this。通配符可以工作,但您可能会在生产中的 S3 上遇到延迟问题,并且可能希望使用 AmazonS3Client 检索路径。
我必须像这样下载许多存储在 S3 上的 gzip 文件:
crawl-data/CC-MAIN-2018-43/segments/1539583508988.18/robotstxt/CC-MAIN-20181015080248-20181015101748-00000.warc.gz
crawl-data/CC-MAIN-2018-43/segments/1539583508988.18/robotstxt/CC-MAIN-20181015080248-20181015101748-00001.warc.gz
要下载它们,您必须添加前缀 https://commoncrawl.s3.amazonaws.com/
我必须下载并解压文件,然后assemble将内容作为单个 RDD。
与此类似的内容:
JavaRDD<String> text =
sc.textFile("https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2018-43/segments/1539583508988.18/robotstxt/CC-MAIN-20181015080248-20181015101748-00000.warc.gz");
我想用 spark 做这个代码:
for (String key : keys) {
object = s3.getObject(new GetObjectRequest(bucketName, key));
gzipStream = new GZIPInputStream(object.getObjectContent());
decoder = new InputStreamReader(gzipStream);
buffered = new BufferedReader(decoder);
sitemaps = new ArrayList<>();
String line = buffered.readLine();
while (line != null) {
if (line.matches("Sitemap:.*")) {
sitemaps.add(line);
}
line = buffered.readLine();
}
要从 S3 读取内容,您可以这样做:
sc.textFiles("s3n://path/to/dir")
如果 dir
包含您的 gzip 文件,它们将被压缩并合并到一个 RDD 中。如果你的文件不是直接在这样的目录的根目录下:
/root
/a
f1.gz
f2.gz
/b
f3.gz
甚至这个:
/root
f3.gz
/a
f1.gz
f2.gz
那么你应该像这样使用通配符 sc.textFiles("s3n://path/to/dir/*")
并且 spark 将递归地查找 dir
及其子目录中的文件。
不过要注意 this。通配符可以工作,但您可能会在生产中的 S3 上遇到延迟问题,并且可能希望使用 AmazonS3Client 检索路径。