【发布时间】:2016-05-10 05:32:26
【问题描述】:
我有这个文件夹集合:
60G ./big_folder_6
52G ./big_folder_8
61G ./big_folder_7
60G ./big_folder_4
58G ./big_folder_5
63G ./big_folder_2
54G ./big_folder_9
61G ./big_folder_3
39G ./big_folder_10
74G ./big_folder_1
每个文件夹包含 100 个 txt 文件,每行一个句子。例如文件 ./big_folder_6/001.txt:
sentence ..
sentence ..
...
文件夹中的每个文件大小在 4 到 6 GB 之间(从上面报告的总数可以看出),或多或少有 40-6000 万个句子。一个文件适合内存。
我需要对句子全局唯一进行去重和计数,以便获得一个新的文件集合,其中行被计数:
count ...unique sentence...
馆藏很大。
我的第一个实现(使用 Java)是一种“合并排序”方法,对 500 个文件的新集合中的行进行排序(使用前 N 个字符调度正确文件中的每一行),然后在单个文件上排序和聚合重复项文件。
我知道这是一个 wordcount map-reduce 问题,但我宁愿避免它。问题是:我是在使用正确的方法来解决这类问题,还是应该考虑 MapReduce 之外的其他工具/方法?
【问题讨论】:
-
你为什么不试试hadoop?如果没有,您可以启动适当的多个线程来读取每个文件,并且每个线程都尽力计算它。
-
您是否需要对所有文件和所有目录进行重复数据删除和计数?
-
我们可以假设唯一的行将适合内存,还是需要以最终结果大于可用内存的方式完成?
-
尝试fork加入java的java框架
-
您能否发布一个输入和预期输出的小示例。目前尚不清楚您想要实现什么。