用Java处理数据量较大的文件
问个小问题哈,我的需求是这样,现在有两个文本txt文件,每一个文件当中都有大概五百万条记录,文件1的记录格式为
user_id username login_time
文件2的记录格式为
user_id comment_num forward_num friend_num
其中两个表中的user_id是关联的,但不是一一对应。
我现在想使用Java编程序来提取【文件1.user_id=文件2.user_id】的记录,并且写到另一个文件3中。
求问大家有什么好主意没?^_^
导入数据库之后做表连接的办法就免了……机器太破跑不起。。 java 大数据 --------------------编程问答-------------------- 500W记录有多大? --------------------编程问答-------------------- 最简单容易想到的思路:类似于两个list
当然不是说把所能的数据读到list里,
而是从文件一读一条然后循读文件二进行比较
内存耗的少,速度慢 --------------------编程问答-------------------- 据说好像可以先把大文件分成小文件存储,然后在操作小文件,百度搜索 海量数据处理 有不少讲这方面的 --------------------编程问答-------------------- 这个问题你昨天就发过了吧。。
反正昨天好像看到过。。
一次型全部装入内存是不行的,
那么我们能不能根据txt来创建一个索引呢?
就比如能不能根据id的前两位把数据分放到多张表中(根据id前两位明明表名或者文件名)。
查询的时候,遍历一个文件,先查10开头的文件,然后11,然后12.。。 --------------------编程问答-------------------- 1、笨办法
从1里面找第一行的 id ,找到1里面是否还有id跟第一行一样,把一样的取出来
然后遍历 2里面的id,如果找到 把记录取出来保存。
2、优化一下
每次匹配完成后 把1 跟 2 里面对应的记录删掉,这样的话越往后文件越来越小,效率会越来越高
--------------------编程问答-------------------- Hadoop么? --------------------编程问答-------------------- 1. 两个500w文件塞进内存应该不夸张吧?
2. 如果实在不行,遍历小的那个文件,建立user_id - 行数的索引放在内存,然后在根据索引内容和第二个文件做连接
3. 如果实在还是不行,建立第一个索引以后再建一个索引,然后两个索引做连接
4. 如果实在还不行,请砸键盘 --------------------编程问答-------------------- 请使用ETL工具
类似kettle --------------------编程问答-------------------- 用hadoop吧 适合处理大数据 --------------------编程问答-------------------- 百度 lucene 全文检索
倒序索引
对你有帮助的
如果数据只用一次的话,最快最好的方法就是暴力搜索。如果考虑数据以后需要维护增删改查,那就要见索引了。
补充:Java , Java SE