【Python】大数据存储技巧,快出csv文件10000倍!
作者:杰少
大數據存儲格式對比
簡 介
在之前文章中,我們對比了在遇到大數據時,不同數據處理工具包的優劣,
是否擁有豐富的數據處理函數;
是否讀取數據夠快;
是否需要額外設備(例如GPU)的支持等等。
但無論這些工具包處理數據的時間多快,在碰到例如10G以上的數據時,都還是會耗費一些時間的,快的可能幾十秒,慢的可能幾十分鐘,然后再進行一些特征抽取等等,快的話也得幾十分鐘,而此時,為了節省時間消耗,我們就需要將這些中間結果線存儲到磁盤上面,而不同格式的存儲,帶來的差別是巨大的,比如:
存儲一個大的文件,存成csv格式需要10G,但是存成其它格式可能就只需要2G;
存成csv文件讀取需要20分鐘,存成其它格式讀取只需要10秒。
存儲格式的選擇也會節省海量的時間,那么究竟選用何種存儲方式呢?本文我們就對比下面幾大流行的存儲格式。
csv
feather
hdf5
jay
parquet
pickle
數據存儲格式對比
01
csv
csv格式是使用最多的一個存儲格式,但是其存儲和讀取的速度會略慢。
02
feather
feather是一種可移植的文件格式,用于存儲Arrow表或數據幀(來自Python或R等語言),它在內部使用Arrow-IPC格式。Feather是在Arrow項目早期創建的,作為Python(pandas)和R的快速、語言無關的數據幀存儲的概念證明。
feather可以顯著提高了數據集的讀取速度
03
hdf5
hdf5設計用于快速I/O處理和存儲,它是一個高性能的數據管理套件,可以用于存儲、管理和處理大型復雜數據。
04
jay
Datatable使用.jay(二進制)格式,這使得讀取數據集的速度非???。
05
parquet
在Hadoop生態系統中,parquet被廣泛用作表格數據集的主要文件格式,Parquet使Hadoop生態系統中的任何項目都可以使用壓縮的、高效的列數據表示的優勢?,F在parquet與Spark一起廣泛使用。這些年來,它變得更容易獲得和更有效,也得到了pandas的支持。
06
pickle
pickle模塊實現二進制協議,用于序列化和反序列化Python對象結構。Python對象可以以pickle文件的形式存儲,pandas可以直接讀取pickle文件。注意,
pickle模塊不安全。最好只unpickle你信任的數據。
代 碼
1.csv讀取
2.feather讀取
%%time data?=?pd.read_feather("../input/riiid-train-data-multiple-formats/riiid_train.feather") print("Train?size:",?data.shape)#?Train?size:?(101230332,?10) #?CPU?times:?user?3?s,?sys:?17.5?s,?total:?20.5?s #?Wall?time:?19.6?s3.hdf5讀取
%%time data?=?pd.read_hdf("../input/riiid-train-data-multiple-formats/riiid_train.h5",?"riiid_train") print("Train?size:",?data.shape)#?Train?size:?(101230332,?10) #?CPU?times:?user?10.5?s,?sys:?10.5?s,?total:?20.9?s #?Wall?time:?53.8?s4.jay讀取
%%time data?=?dt.fread("../input/riiid-train-data-multiple-formats/riiid_train.jay") print("Train?size:",?data.shape) #?Train?size:?(101230332,?10) #?CPU?times:?user?4.66?ms,?sys:?2.77?ms,?total:?7.43?ms #?Wall?time:?24.5?ms5.parquet讀取
%%time data?=?pd.read_parquet("../input/riiid-train-data-multiple-formats/riiid_train.parquet") print("Train?size:",?data.shape)#?Train?size:?(101230332,?10) #?CPU?times:?user?43.4?s,?sys:?17.7?s,?total:?1min?1s #?Wall?time:?47.2?s6.pickle讀取
%%time data?=?pd.read_pickle("../input/riiid-train-data-multiple-formats/riiid_train.pkl.gzip") print("Train?size:",?data.shape)#?Train?size:?(101230332,?10) #?CPU?times:?user?5.75?s,?sys:?8.7?s,?total:?14.5?s #?Wall?time:?42.3?s小 結
csv的文件存儲,在讀取的時候是最為消耗時間的;如果數據大的話不建議存儲為csv形式;
jay文件是讀取最快的,相較于其他的快了幾百倍,比csv則快了千萬倍;
feather,hdf5,parquet和pickle也都很快,比csv文件的讀取快10倍不止。
參考文獻
Tutorial on reading large datasets
https://docs.python.org/3/library/pickle.html
https://parquet.apache.org/documentation/latest/
https://www.hdfgroup.org/solutions/hdf5
總結
以上是生活随笔為你收集整理的【Python】大数据存储技巧,快出csv文件10000倍!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QQ浏览器如何开启夜间模式 夜间模式使用
- 下一篇: 番茄花园win11 32位专业版镜像系统