【问题标题】:Access random line in large file on Google Cloud Storage访问谷歌云存储大文件中的随机行
【发布时间】:2019-03-29 01:07:18
【问题描述】:

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

我的理解是,我无法使用 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 获得一个文件系统句柄,这样我就可以将数据直接放入其他脚本中,那就太好了——但我可以接受重写它们以逐行读取,如果那是什么必要的。关键是——在任何情况下界面都不应该下载整个文件。

【问题讨论】:

    标签: google-cloud-platform filesystems gcsfuse distributed-filesystem google-genomics


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 2014-09-04
      • 2017-05-13
      • 1970-01-01
      • 2018-05-31
      • 2020-01-18
      • 2018-10-10
      • 2019-12-12
      • 2019-10-15
      相关资源
      最近更新 更多