を解析している間、私は列のテキストは多くの情報や文章で構成OutOfMemoryErrorのCSV
id, name, comment, text
1, Alex, Hello, I believe in you
それで一つの巨大なcsvファイル(500メガバイト)と400Kレコードを持っています。私はこの列( "テキスト")を取得し、アルファベット以外の記号をすべて ""に置き換え、列 "Text"の最も頻繁な単語から1000の最も頻度の低い単語と逆順にソートします。これは、 。私はCsvReaderライブラリを使用しています
CsvReader doc = new CsvReader("My CSV Name");
doc.readHeaders();
try {
List<String> listWords = new ArrayList<>();
while (doc.readRecord()) {
listWords.addAll(Arrays.asList(doc.get("Text"/*my column name*/).replaceAll("\\P{Alpha}", " ").toLowerCase().trim().split("[ ]+")));
}
Map<String, Long> sortedText = listWords.stream()
.collect(groupingBy(chr -> chr, counting()))
.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Collections.reverseOrder()))
.limit(1000)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> e1,
LinkedHashMap::new
));
sortedText.forEach((k, v) -> System.out.println("Word: " + k + " || " + "Count: " + v));
doc.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
doc.close();
}
実行後、GCが超過したというメモリ不足エラーが発生しました。どのように最善を尽くすか?ヒープサイズを増やすことはできません。デフォルト設定で作業する必要があります
た時点では、メモリが不足している:
コードは次のようなものになるだろうか? 'listWords'に単語を追加するときや、それをソートするときに起こるのでしょうか? – radimpe
リストワードに単語を追加すると起こります –