【问题标题】:How to parallelize a method and write results to file?如何并行化方法并将结果写入文件?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 2013-04-04
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多