0

我正在尝试从存储在公共云存储桶中的大文件中读取随机行。

我的理解是我不能用 gsutil 做到这一点并且已经研究了 FUSE 但不确定它是否会满足我的用例: https ://cloud.google.com/storage/docs/gcs-fuse

有很多文件,每个文件大约 50GB——总共有几个 TB。如果可能的话,我想避免下载这些文件。它们都是纯文本文件——你可以在这里看到它们: https://console.cloud.google.com/storage/browser/genomics-public-data/linkage-disequilibrium/1000-genomes-phase-3/ldCutoff0。 4_window1MB

如果我可以使用 FUSE 简单地获取文件系统句柄,这样我就可以将数据直接放入其他脚本中,那就太好了——但如果有必要,我可以重新编写它们以逐行读取。关键是——在任何情况下界面都不应该下载整个文件。

4

1 回答 1

2

Range 标头允许您使用 XML API 从文件中下载特定的字节偏移量。

没有直接的方法来检索特定的,因为 GCS 不知道文件中任何给定行的开始/结束位置。查找特定行的工具通常会读取整个文件,以便计算换行符以找到所需的行。

如果文件中有行号,那么您可以进行二进制搜索以查找所需的行。您将请求小块,检查行号,然后根据此尝试不同的位置,直到找到所需的行。

如果文件没有行号,您可以进行预处理以使其成为可能。在初始文件上传之前,您可以扫描文件并记录每 N 行的字节位置。然后,要获得所需的行,您可以在该索引中查找字节位置,并可以对相关部分进行范围请求。

于 2018-10-24T18:12:58.600 回答