作者yauhh (哟)
看板Programming
标题Re: [问题] 大量资料处理
时间Mon Sep 10 23:23:47 2012
※ 引述《jackal11 (NC)》之铭言:
: 小弟最近要处理几百万笔的资料,格式以.txt档为主
: 除了原本的资料档外,还要另外Output出两个档
: 两个档的差别就在於
: 一个档是印出原本资料档里,所有重复的字串
: 而另一个档则是印出原本资料档里,所有不重复的字串
: 而小弟所遇到的问题就是
: 我在程式里每读一笔资料,就要跟之前的"""已读的"""资料比对一次
: 然後就很耗时间........
: 想问大家有没有哪种"""程式语言"""(混合也可),可以较为快速处理大量的文字资料
: -----
: PS希望可以不要用到database来处理
: 先感谢大家了>___<"
: -----
: 补充一下,目前小弟是用python中的字典,来存放key和value
: 跑了半小时,只跑了5000笔资料><"
我觉得可以用MapReduce这种方法. 计算的主力也可以不要用记忆体撑,除非
速度是重点.
如果是使用档案系统,我这个例子是MapReduce的转型:
//Mapper
for (i=0; i<n; i++) {
if file_exist(treat_as_file(Base + "\only\" + data(i))) {
touch(treat_as_file(Base + "\dup\" + data(i)));
delete(treat_as_file(Base + "\only\" + data(i)));
} else if !file_exist(treat_as_file(Base + "\dup\" + data(i))) {
touch(treat_as_file(Base + "\only\" + data(i)));
}
}
//Reducer
for (i=0; i<get_files_count(treat_as_folder(Base + "\only\")); i++) {
append(get_files_under(treat_as_folder(Base + "\only\")[i],
Target_File_For_Data_Only);
}
for (i=0; i<get_files_count(treat_as_folder(Base + "\dup\")); i++) {
append(get_files_under(treat_as_folder(Base + "\dup\")[i],
Target_File_For_Data_Duplicate);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.167.47.109
1F:推 jackal11:好的,谢谢大大我来研究研究!!! 1.172.92.111 09/10 23:44
2F:→ MOONRAKER:这是利用filesystem。 114.45.203.126 09/11 06:24
3F:→ MOONRAKER:前提是字串内没有特殊字元。 114.45.203.126 09/11 06:24
4F:→ yauhh:抽象化了,treat_as_file就做这事 60.250.144.223 09/11 10:19