C++读大数据量的txt文件,并处理其中的数据? 50
文件格式如下(假设有两列数据):122434123512…3434345454…100000100000即假如文件中数值最大的为100000(10万)。有100万行数据,...
文件格式如下(假设有两列数据):
1 2
2 4
3 4
1 2
3 5
1 2
…
34343 45454
…
100000 100000
即假如文件中数值最大的为100000(10万)。有100万行数据,每一行代表一个数对(可以理解为一个二元组),每个二元组可能会出现多次,如“1 2”出现3次,那么定义数组A[1][2]=3,假如“1 3”没有出现,那么A[1][3]=0,以此类推。其实相当于构造出一个10万阶的矩阵,矩阵每个元素代表着相应二元组出现的次数。希望将矩阵中每个元素都写入到新的txt文档中。PS:以上是对这个问题的描述,当然这样的矩阵如何表示,能否表示,又是如何得到的是一个关键问题,本人菜鸟,望高手指教! 展开
1 2
2 4
3 4
1 2
3 5
1 2
…
34343 45454
…
100000 100000
即假如文件中数值最大的为100000(10万)。有100万行数据,每一行代表一个数对(可以理解为一个二元组),每个二元组可能会出现多次,如“1 2”出现3次,那么定义数组A[1][2]=3,假如“1 3”没有出现,那么A[1][3]=0,以此类推。其实相当于构造出一个10万阶的矩阵,矩阵每个元素代表着相应二元组出现的次数。希望将矩阵中每个元素都写入到新的txt文档中。PS:以上是对这个问题的描述,当然这样的矩阵如何表示,能否表示,又是如何得到的是一个关键问题,本人菜鸟,望高手指教! 展开
3个回答
展开全部
一个文件有100万行,如果编写出来也慢死。mmap的方式,将文件映射到内存中,但是你内存多大啊,或者使用fread---.不过32位的LINUX一个进程的最大内存申请总和为3G。
看来你做的比我做的数据分析还难,佩服
看来你做的比我做的数据分析还难,佩服
追问
其实可用的内存不大,不到1G。问题就是上述描述的那样,我也没什么思路,你有没有好的方法详细说下
追答
并行开进程啊,先有一个控制进程,用于控制如何给这些进程文件名,再有一个用于PV控制的额进程,用于结果的处理,否则读取的结果如何存储。并行开10个读取进程,每个进程读取一个文件文件,将读取的内容放在PV控制进行中,由PV的信号量控制共享内存的使用,最终生成每个文件对应的数据,最后的存储看你的机制了。我做信号处理就是这样的
展开全部
朋友你是想问怎么编程解决这个问题还是怎么给出一种高效的编程思路啊?
如果只是想解决这个问题,我做过大数据的图像处理,一幅图超过1G的那种。如果你内存足够,想一次性读进去,就自定义一个数据类型来存储,我以前在windows下用VC6.0读不了超过多大的数据(具体忘了),但是这样系统会非常非常卡。或者就是像其他朋友说的那样分块来做,把输入和输出矩阵按照可以接受的大小等分,依次读输入,然后按照映射关系分别写到输出文件里面,最后需要的话再合并。这样应该应该可以的。
如果只是想解决这个问题,我做过大数据的图像处理,一幅图超过1G的那种。如果你内存足够,想一次性读进去,就自定义一个数据类型来存储,我以前在windows下用VC6.0读不了超过多大的数据(具体忘了),但是这样系统会非常非常卡。或者就是像其他朋友说的那样分块来做,把输入和输出矩阵按照可以接受的大小等分,依次读输入,然后按照映射关系分别写到输出文件里面,最后需要的话再合并。这样应该应该可以的。
追问
是的 我是想知道该怎么编程解决这个问题,以前没做过大数据的处理,没有思路
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要做什么处理?
可不可读取几行,然后处理,在读取,在处理
你可以试试缓存,就是创建临时文件,反复操作,应该没问题
可不可读取几行,然后处理,在读取,在处理
你可以试试缓存,就是创建临时文件,反复操作,应该没问题
追问
这个问题可以这么去理解:假如图中有10万个节点(序号1-10万),节点之间存在联系,二元组出现次数相当于节点之间边的权重,当然了节点之间也可能不存在边。问题就相当于要得到一个邻接矩阵,矩阵中的元素是边的权重(出现次数)。因为数据量很大,不知道该怎么编程处理。如果你有好的方法 请详细介绍下
追答
我没时间帮你太多,我只是说说我的想法,你处理一部分,就保存成文件,然后继续,这样内存就够用了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询