【发布时间】:2016-07-10 18:31:00
【问题描述】:
我有什么
我有很多 CSV 文件,如下所示:
Date;Something;
2014-03-31 15:00:01;xxx;
2015-02-01 13:20:01;xxx;
2014-03-03 17:00:03;xxx;
2014-03-03 17:00:04;xxx;
第二行并非错误 - 日期是“随机”的,介于 2014 年和 2016 年之间。幸运的是,大多数日期与最后两行类似。但上面的序列是真实的例子。
文件如何并行以及为什么并行?
每年有 5000 个文件。每一个都是 gzip 压缩的。所以IO不是问题。 CPU 现在很无聊。
我需要什么
上述文件中的行按天分组在单独的文件中。我不在乎里面的顺序。
我在想什么
使用 Java 并行流读取文件。但我不知道如何将线程安全写入多个文件? 我发现了类似的东西:Write to text file from multiple threads? 和 Threads and file writing 但我不确定这是否可行?
【问题讨论】:
-
不明白为什么要从多个线程写入单个文件。您是否需要为每个输入文件生成多个输出文件(针对每一天组)?或者您想汇总所有输入文件?
-
我想为所有输入文件的每一天生成文件。因此,从具有混合内容的文件组中,我希望每天收到一个文件。
-
您为什么要尝试优化性能?你有多少 TB 的数据?
-
输入的是一个文件还是多个文件?
-
这就是问题所在。除非您正在使用某种疯狂的算法,否则 CPU 不会成为瓶颈。因此,并行运行不会对您有所帮助。你受限于 IO。现在,如果输入像 100k 个不同的文件,并行可能会有所帮助。如果输入像 10 个文件,我认为多线程不会有任何帮助。
标签: multithreading java-8