【发布时间】:2018-03-07 12:52:29
【问题描述】:
我已经在寻找解决方案很长一段时间了,但我仍在为并发和并行化而苦苦挣扎。
背景:有一个 ETL 过程,我得到一个很大的 csv(最多超过一百万行)。在生产中也会有实时更新。我想拼写检查每一行。为此,我使用了改编的LanguageTool。检查方法(里面有我的自定义)需要很长时间。我想加快速度。
一方面当然是方法本身,但我也想简单地一次检查多行。行的顺序并不重要。结果是更正后的文本,应将其写入新的 csv 文件以进行进一步处理。
我发现ExecutorService 可能是一个合理的选择,但由于我对它不是很熟悉,因此我们将不胜感激。
这就是我目前在 ETL 过程中使用它的方式:
private static SpellChecker spellChecker;
static {
SpellChecker tmp = null;
try {
tmp = new SpellChecker(...);
} catch (Exception e) {
e.printStackTrace();
}
spellChecker = tmp;
}
public static String spellCheck(String input) {
String output = input.replace("</li>", ".");
output = searchAVC.removeHtml(output);
try {
output = spellChecker.correctText(output);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return output;
}
我的 spellChecker 是一个自定义库,我创建了它的静态对象(因为 LanguageTool 的实例化需要一些时间)。
我想并行化spellCheck的执行。
我已经读过这样的东西: https://www.airpair.com/java/posts/parallel-processing-of-io-based-data-with-java-streams What is the easiest way to parallelize a task in java? Write to text file from multiple threads?
我真的不知道要结合所有这些信息。阅读文件时我需要注意什么?写文件?处理行?
【问题讨论】:
标签: java multithreading parallel-processing