【发布时间】:2021-10-13 04:01:39
【问题描述】:
我说需要使用 julia 语言处理 65,000 个 .csv 文件。
目标是对数据集进行基本统计。
我有一些方法可以连接所有数据集
#1 - set a common index and leftjoin() - perform statistics row wise
#2 - vcat() the dataframes on top of each other - vertically stacked use group by
无论如何,最终的数据帧都非常大!处理速度变慢
有没有一种有效的方法?
我想过执行 #1 或 #2 并将连接操作分成三份,假设在 20,000 次连接后保存到 .csv 并分块操作,然后在最后一次操作中加入所有 3 个操作。
不知道如何复制制作 65k .csv 文件,但基本上在下面我循环浏览目录中的文件,加载 csv 然后将 vcat() 加载到一个 df。更多关于是否有更好的方法来管理操作规模的问题。 vcat() 使某些东西成长。提前也许我可以循环浏览 .csv 文件,获取每个 .csv 的文件尺寸,将完整数据帧初始化为最终输出大小,然后逐行循环遍历每个 .csv 并填充初始化的 df。
using CSV
using DataFrames
# read all files in directory
csv_dir_tmax = cd(readdir, "C:/Users/andrew.bannerman/Desktop/Julia/scripts/GHCN data/ghcnd_all_csv/tmax")
# initialize outputs
tmax_all = DataFrame(Date = [], TMAX = [])
c=1
for c = 1:length(csv_dir_tmax)
print("Starting csv file ", csv_dir_tmax[c]," - Iteration ",c,"\n")
if c <= length(csv_dir_tmax)
csv_tmax = CSV.read(join(["C:/Users/andrew.bannerman/Desktop/Julia/scripts/GHCN data/ghcnd_all_csv/tmax/", csv_dir_tmax[c]]), DataFrame, header=true)
tmax_all = vcat(tmax_all, csv_tmax)
end
end
【问题讨论】:
-
如果您想获得可靠的建议,请分享您现在使用的代码,然后可以对其进行调查。一般来说,从您的描述看来,您执行的聚合可以按文件方式完成,那么您为什么要以其他方式执行它。一般来说,我的假设是性能瓶颈将是 IO 而不是数据处理。
-
高层次的想法是多线程加载和vcat,然后适当地聚合它,但是对于这样的普遍问题很难提供好的建议。