我有大量的数据文件来描述大量气象站的天气。这些文件是每小时一次,并包含在按日期分隔的文件中。
例如:
20100101.csv
20100102.csv
20100103.csv
.
.
20140228.csv我需要按站汇总数据,然后将其写入磁盘。也就是说,对于每个天气文件,我需要提取i站点的数据,然后将其写入磁盘。
产出:
station_001.csv
station_002.csv
.
.
station_999.csv为了加快速度,我决定使用foreach和doMC包并行读取每天的文件,并在通过站点并行聚合后将站点文件写入磁盘。
更具体地说,我使用foreach读取文件,并使用.combine="rbind"组合它们(我有足够的内存在内存中创建一个巨大的数据集)。之后,我有了另一个foreach循环,在这个循环中,我按站点对数据进行子集,然后写入磁盘。我发现,通过并行读写,我的速度得到了很好的提高。
我的问题是:并行读写是个好主意吗?我确保不同的线程不会读取相同的数据文件或写入同一个站点文件,但是在进行了一些good搜索之后,将i/o任务(例如,我发现对并行输入/输出说不。和在R博客上发表文章,显示并行阅读)并行化似乎不是一个好主意。
发布于 2014-02-28 20:23:08
Performance Pro
性能Con
发布于 2014-02-28 20:34:50
你说你注意到了性能的提高,所以这对你来说显然是个好主意。
加快速度的其他方法--查看fread in data.table --这将显著提高顺序阅读速度(提高3倍或更多)。使用rbindlist (也来自data.table)来组合也可以提供速度提升(例如使用foreach这里- 用.combine=rbindlist进行研究)。
https://stackoverflow.com/questions/22104858
复制相似问题