ネストされたフォルダー階層に配置されたさまざまなソースからの30ギガのテキストファイルとhtmlファイルがあります。これらすべてのフォルダーは、zipFilesという名前のフォルダーの私のホームディレクトリにあります。階層は20レベルで、一部のブランチは他のブランチよりも深いです。 SparkプロジェクトでRDDとして使用するために、これらすべてのファイルのテキストを1つの巨大なテキストファイルに連結します。明らかに、htmlを削除してhtmlファイルをテキストに変換する必要がありますコードもフォーマットします。
私のアプローチは次のとおりです:ネストされたフォルダ階層を反復処理します(bashでこれを行う方法がわかりません)htmlの場合はファイルを解凍し、テキストに変換して巨大な結果に追加します
コードで変数にテキストを追加するだけでメモリ内ですべてを実行すると、これで発生する問題はRAMが不足しています。
ディスクから巨大なファイルを開いて書き込み、ファイルを閉じると、ディスクをスラッシングしているので、ゆっくりと進みます。
それが私を怖がらせるので、bashスクリプトは私の唯一のソリューションです。私はpythonでそれを行うことができたと思いますが、その後、pythonで解凍し、htmlからテキストへの変換も行う方法を知る必要があります。
find
は、ディレクトリで何かを再帰的に実行する必要がある場合に適したツールです。 zcat缶
私のアプローチは次のようなものです:
find /home/username/zipFiles -type f -name "*.Zip" -exec zcat {} \; > outputfile.txt
例:
$ df > testfile.txt
$ Zip testArchive testfile.txt
adding: testfile.txt (deflated 54%)
$ find . -maxdepth 1 -name "*.Zip" -exec zcat {} \;
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1954212 4 1954208 1% /dev
tmpfs 393160 3392 389768 1% /run
/dev/sda1 115247656 82424300 26946008 76% /
none 4 0 4 0% /sys/fs/cgroup
none 5120 0 5120 0% /run/lock
none 1965792 80 1965712 1% /run/shm
none 102400 32 102368 1% /run/user
cgmfs 100 0 100 0% /run/cgmanager/fs
/dev/sdb1 30343056 48 30343008 1% /media/xieerqi/SDCZ43-032G