听说feather格式比较快,所以引起我的兴趣。我想了解一下,和hdf5相比,谁更快,适合的场景是什么?
using DataFrames
using CSV
csv_path = s"C:\Users\songroom\Desktop\000001.XSHE.csv"
#df = CSV.read(csv_path);
df = @time CSV.File(csv_path) |> DataFrame;
_df =DataFrame()
for i =1:20
global _df =vcat(_df,df)
end
println("size new df :$(size(_df))")
# write feather file
@time ft_file = Feather.write(s"C:\Users\songroom\Desktop\ft.ft",_df)
# read feather file
ft_path ="C:\\Users\\songroom\\Desktop\\ft.ft";
# ft_path =r"C:\Users\songroom\Desktop\ft.ft";#注意,无法识别!
@time ft = Feather.read(ft_path)
具体的速度,大家可以看到,的确非常快!
1、写
2、读
二、和hdf5的比较
总体上看,这两种结构速度都比较快,是一个量级。相比而言,feather格式对内容不挑,数值型和字符型处理速度都比较快;大家可以比较一下全数值型可以看看。
但hdf5的优势在数值型;不同的是,feather存放的方式目前没有hdf5多,可以group/dataset.
三、关于数值型
using Feather;
using Tables;
n =5000000
println("生成随机数...")
@time r = randn(10,n);
println("完成随机数据生成")
println("生成table,转成可读的数据格式")
t = Tables.table(r);
println("完成table生成!");
path = s"C:\Users\songrooml\Desktop\r.df"
println("write feather data....")
@time Feather.write(path,t);
println("完成feather data生成!")
println("read feather data....");
@time values = Feather.read(path)
println("read over!")
四、文件大小
我手头有一个csv,大约23万行,13列左右;
csv文件:21.1M
feather文件:27.2M
feather文件与hdf5文件差不多,但都要比csv大一些,大20-30%左右。