4

私が何を望んでいるのかを理解することが重要であるため、最初に私の問題を説明します:-)。

私は、いくつかの外部ツールを使用していくつかのゲノミクス データ分析を実行する Python で記述されたパイプラインに取り組んでいます。このツールの 1 つは非常に巨大な fastq ファイルで動作しますが、最終的にはプレーン テキスト ファイルではなくなります。

通常、この fastq ファイルは gzip 圧縮されており、プレーン テキストであるため、圧縮率が非常に高くなります。ほとんどのデータ分析ツールは gzip ファイルで動作しますが、動作しないものもいくつかあります。そのため、ファイルを解凍し、それらを操作して、最後に再圧縮しています。

ご想像のとおり、このプロセスは次のとおりです。

  • もっとゆっくり
  • ディスク消費量が多い
  • 帯域幅の消費 (NFS ファイルシステムで作業している場合)

そこで私は、ツールのソース コードに手を加えることなく、これらのツールを「だまして」gzip 圧縮されたファイルを直接操作する方法を見つけようとしています。

FIFO ファイルを使用することを考え、それを試してみましたが、ツールがファイルを複数回読み取ったり、ツールがファイルをシークしたりすると機能しません。

だから基本的に私は質問する必要があります:

  • 次のようなことができるように、ファイルをメモリにマップする方法はありますか?

    ./tool mapped_file(ここで、mapped_file は実際にはファイルではなく、メモリ マップ ファイルへの参照です。

  • どうすれば目標を達成できるかについて、他に何か提案はありますか?

みなさん、本当にありがとうございました!

4

4 に答える 4

3

この回答から、圧縮されていないファイル全体を RAM にロードできます。

mkdir /mnt/ram
mount -t ramfs ram /mnt/ram
# uncompress your file to that directory
./tool /mnt/ram/yourdata

ただし、これにはすべてを RAM にロードするという欠点があります。圧縮されていないデータを保持するのに十分なスペースが必要です。

umount /mnt/ram終わったら使います。

于 2012-10-12T12:11:07.103 に答える
2

スクリプトが標準入力から読み取ることができる場合、1つの可能性は、zcatを使用して解凍およびストリーミングし、それをスクリプトにパイプすることです。

このようなもの:

zcat large_file.gz | ./tool

結果も圧縮したい場合は、出力を再度gzipにパイプするだけです。

zcat large_file.gz | ./tool | gzip - > output.gz

それ以外の場合は、Pythonのメモリマッピングのサポートを確認できます。

http://docs.python.org/library/mmap.html

最後に、ASCII fastqファイルをBAM形式に変換できます。これは、(それ自体は)圧縮されていませんが、スペースを節約するよりコンパクトな形式を使用しています。以下を参照してください。

http://picard.sourceforge.net/command-line-overview.shtml#FastqToSam

于 2012-10-12T11:45:32.193 に答える
2

FASTQ圧縮ツールを評価したPistoiaAllianceSequenceSqueezeコンテスト入賞作品を検討してください。ランダムアクセスとより高速な解凍パフォーマンスにより、IOオーバーヘッドを削減するツールが見つかる場合があります。

于 2012-10-12T11:57:41.390 に答える
0

Linux を使用している場合は、ヒューズ ファイル システム ドライバーを作成できます: http://pypi.python.org/pypi/fuse-python

fuse ドライバーは、ファイルを圧縮および解凍する必要があります。たぶん、このようなものはすでに存在します。

于 2012-10-12T12:18:10.513 に答える