需求**:
有一个15G左右的日志文件,文件中每一行都是一串数字。长度在3——12位之间不等。现在需要算出在日志文件中数字出现次数最多的前10个。**
遇到的问题:
while(!feof(fp)){ fgets(mid,1000,fp); //读取一行内容 }
我用这种方法读取文件,一直报 Segmentation fault (core dumped)。gbd调试情况如下:
需要能读取大文件的方法。求高手支招。
认证高级PHP讲师
このファイルの書き方は非常に非効率的であり、どのような状況でも使用されません。非常に大きなテキスト ファイルの単語頻度による並べ替えは、Hadoop によって解決される最も一般的な問題です。
同様の関数のソース プログラムの書き方は次のとおりです: C 言語で Hadoop ワード統計プログラムを作成します
本当に Hadoop を学びたくない場合は、Hadoop を使用していなくても、パイプライン コマンドを使用して直接実行できます。cat numbers.txt | ./mapper | sort | ./reducerマッパーとリデューサーは 2 つです。元のテキストのマッピングとサマライザ。
cat numbers.txt | ./mapper | sort | ./reducer
ファイルを使用してこの種のデータを読み取る方法を知りたい場合は、2 つのオプションがあります。1 つは 64 ビット整数を使用する方法です。
もう 1 つの方法は、文字列を使用することです:
要するに、ライン読みを使用しないでください。読んだ後、どう対処したのか気になります。メモリ割り当て中にクラッシュしたと思います。すべての内容をメモリに読み込んで処理する予定ですか?
Linux + C が必要な主な質問によると、次のようなアイデアが提供されています。 共有メモリ (mmap) を使用して、一度にファイルの一部をマッピングし、順番に処理することを検討できます
split を使用してファイルを分割してから並べ替えることを検討できます。
このファイルの書き方は非常に非効率的であり、どのような状況でも使用されません。非常に大きなテキスト ファイルの単語頻度による並べ替えは、Hadoop によって解決される最も一般的な問題です。
同様の関数のソース プログラムの書き方は次のとおりです:
C 言語で Hadoop ワード統計プログラムを作成します
本当に Hadoop を学びたくない場合は、Hadoop を使用していなくても、パイプライン コマンドを使用して直接実行できます。
cat numbers.txt | ./mapper | sort | ./reducer
マッパーとリデューサーは 2 つです。元のテキストのマッピングとサマライザ。
ファイルを使用してこの種のデータを読み取る方法を知りたい場合は、2 つのオプションがあります。1 つは 64 ビット整数を使用する方法です。
リーリーもう 1 つの方法は、文字列を使用することです:
リーリー要するに、ライン読みを使用しないでください。読んだ後、どう対処したのか気になります。メモリ割り当て中にクラッシュしたと思います。すべての内容をメモリに読み込んで処理する予定ですか?
Linux + C が必要な主な質問によると、次のようなアイデアが提供されています。
共有メモリ (mmap) を使用して、一度にファイルの一部をマッピングし、順番に処理することを検討できます
split を使用してファイルを分割してから並べ替えることを検討できます。
リーリー