如何并行化方法并将结果写入文件?

时间:2018-03-07 12:52:29

标签: java multithreading parallel-processing

我已经找了很长一段时间的解决方案,但我仍然在努力进行并发和并行化。

背景:有一个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?

我真的不知道要结合所有这些信息。阅读文件时我需要注意什么?写文件?处理行?

1 个答案:

答案 0 :(得分:0)

创建负责的Reader类正在从File中读取。 Create Writer类负责从文件写入。 创建处理器类负责处理。 现在创建一个负责读取块的分区器并将批量行发送给读者,读者将使用处理器处理并向批处理器发送批量行。 运行创建一个线程池以在多线程环境中执行。