我的程序接收大型CSV文件并将其转换为XML文件。为了有更好的性能,我想把这个文件分成(例如) 500行的小段。可用于拆分文本文件的Java库有哪些?
发布于 2008-11-26 16:54:53
我不明白将CSV文件拆分成更小的文件会得到什么?使用Java,你可以边读边处理文件,你不必一次读完所有的文件……
发布于 2008-11-26 16:22:20
您打算如何处理这些数据?
如果只是一个记录一个记录地处理,那么面向事件(SAX或StaX)解析将是可行的。对于逐条记录的处理,现有的“流水线”工具包可能适用。
您可以使用像this one或this Splitter.java这样的拆分器功能对文件进行预处理。
发布于 2008-11-27 11:55:18
文件拆分后,您计划如何分发工作?
我在一个名为GridGain的框架上做了类似的事情-它是一个网格计算框架,允许您在计算机网格上执行任务。
有了它,您就可以使用缓存提供程序(如JBoss缓存)将文件分发到多个节点,指定开始和结束行号以及进程。下面的GridGain示例概述了这一点:http://www.gridgainsystems.com/wiki/display/GG15UG/Affinity+MapReduce+with+JBoss+Cache
或者,您可以使用Hadoop和Hadoop文件系统在不同节点之间移动文件。
同样的概念也可以在本地机器上实现,方法是将文件加载到缓存中,然后分配文件的某些“块”由单独的线程处理。网格计算的东西实际上只适用于非常大的问题,或者为您的解决方案提供一定程度的可伸缩性。您可能需要注意IO瓶颈和锁,但可以使用一个简单的线程池,在文件拆分后将“作业”分派到其中。
https://stackoverflow.com/questions/321267
复制相似问题