有一份10G以上大文本文件,需要替换里面的一些文本信息(每一行都有),如何高效读并替换掉生成新的文件
人生最曼妙的风景,竟是内心的淡定与从容!
まず複数のファイルに分割してください
2つのスレッドが同じファイルを操作することを避けるために、複数のスレッドが複数のファイルを操作します
ファイルを 1 行ずつ読み取り、新しいファイルを 1 行ずつ書き込みます
すべてのファイルを結合
1,4 Linuxコマンドを使うだけ~
ファイル file = 新しいファイル(ファイルパス); BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file)); BufferedReader リーダー = new BufferedReader(new InputStreamReader(fis,"utf-8"),510241024);String line = "";while((line = Reader.readLine()) != null){
}
パフォーマンスを向上させるために、マッピングされた IO が必要になる場合があります。詳細については、以下を参照してください。
Java で Memory Mapped File または MappedByteBuffer を使用する理由
Java の大きなファイルの読み取りおよび書き込み操作、Java nio の MappedByteBuffer、効率的なファイル/メモリ マッピング
java.ioとjava.nioのパフォーマンスの簡単な比較
単純なテキストの置換であれば、Linuxのsedコマンドを使用するだけです。
より複雑なテキスト置換の場合は、以下を参照してください:
http://stackoverflow.com/ques...
http://www.baeldung.com/java-...
spark分析、lines=sc.textFile("your_file");filterlines=lines.filter(your_filter_function)filterlines.xxx()
まず複数のファイルに分割してください
2つのスレッドが同じファイルを操作することを避けるために、複数のスレッドが複数のファイルを操作します
ファイルを 1 行ずつ読み取り、新しいファイルを 1 行ずつ書き込みます
すべてのファイルを結合
1,4 Linuxコマンドを使うだけ~
ファイル file = 新しいファイル(ファイルパス);
リーリーBufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));
BufferedReader リーダー = new BufferedReader(new InputStreamReader(fis,"utf-8"),510241024);
String line = "";
while((line = Reader.readLine()) != null){
}
パフォーマンスを向上させるために、マッピングされた IO が必要になる場合があります。詳細については、以下を参照してください。
Java で Memory Mapped File または MappedByteBuffer を使用する理由
Java の大きなファイルの読み取りおよび書き込み操作、Java nio の MappedByteBuffer、効率的なファイル/メモリ マッピング
java.ioとjava.nioのパフォーマンスの簡単な比較
単純なテキストの置換であれば、Linuxのsedコマンドを使用するだけです。
より複雑なテキスト置換の場合は、以下を参照してください:
http://stackoverflow.com/ques...
http://www.baeldung.com/java-...
spark分析、
lines=sc.textFile("your_file");
filterlines=lines.filter(your_filter_function)
filterlines.xxx()