日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】大数据存储技巧,快出csv文件10000倍!

發(fā)布時(shí)間:2025/3/12 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】大数据存储技巧,快出csv文件10000倍! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:杰少

大數(shù)據(jù)存儲(chǔ)格式對比

簡 介

在之前文章中,我們對比了在遇到大數(shù)據(jù)時(shí),不同數(shù)據(jù)處理工具包的優(yōu)劣,

  • 是否擁有豐富的數(shù)據(jù)處理函數(shù);

  • 是否讀取數(shù)據(jù)夠快;

  • 是否需要額外設(shè)備(例如GPU)的支持等等。

但無論這些工具包處理數(shù)據(jù)的時(shí)間多快,在碰到例如10G以上的數(shù)據(jù)時(shí),都還是會(huì)耗費(fèi)一些時(shí)間的,快的可能幾十秒,慢的可能幾十分鐘,然后再進(jìn)行一些特征抽取等等,快的話也得幾十分鐘,而此時(shí),為了節(jié)省時(shí)間消耗,我們就需要將這些中間結(jié)果線存儲(chǔ)到磁盤上面,而不同格式的存儲(chǔ),帶來的差別是巨大的,比如:

  • 存儲(chǔ)一個(gè)大的文件,存成csv格式需要10G,但是存成其它格式可能就只需要2G;

  • 存成csv文件讀取需要20分鐘,存成其它格式讀取只需要10秒

存儲(chǔ)格式的選擇也會(huì)節(jié)省海量的時(shí)間,那么究竟選用何種存儲(chǔ)方式呢?本文我們就對比下面幾大流行的存儲(chǔ)格式。

  • csv

  • feather

  • hdf5

  • jay

  • parquet

  • pickle

  • 數(shù)據(jù)存儲(chǔ)格式對比

    01


    csv

    csv格式是使用最多的一個(gè)存儲(chǔ)格式,但是其存儲(chǔ)和讀取的速度會(huì)略慢。

    02


    feather

    feather是一種可移植的文件格式,用于存儲(chǔ)Arrow表或數(shù)據(jù)幀(來自Python或R等語言),它在內(nèi)部使用Arrow-IPC格式。Feather是在Arrow項(xiàng)目早期創(chuàng)建的,作為Python(pandas)和R的快速、語言無關(guān)的數(shù)據(jù)幀存儲(chǔ)的概念證明。

    • feather可以顯著提高了數(shù)據(jù)集的讀取速度

    03


    hdf5

    hdf5設(shè)計(jì)用于快速I/O處理和存儲(chǔ),它是一個(gè)高性能的數(shù)據(jù)管理套件,可以用于存儲(chǔ)、管理和處理大型復(fù)雜數(shù)據(jù)。

    04


    jay

    Datatable使用.jay(二進(jìn)制)格式,這使得讀取數(shù)據(jù)集的速度非常快。

    05


    parquet

    在Hadoop生態(tài)系統(tǒng)中,parquet被廣泛用作表格數(shù)據(jù)集的主要文件格式,Parquet使Hadoop生態(tài)系統(tǒng)中的任何項(xiàng)目都可以使用壓縮的、高效的列數(shù)據(jù)表示的優(yōu)勢。現(xiàn)在parquet與Spark一起廣泛使用。這些年來,它變得更容易獲得和更有效,也得到了pandas的支持。

    06


    pickle

    pickle模塊實(shí)現(xiàn)二進(jìn)制協(xié)議,用于序列化和反序列化Python對象結(jié)構(gòu)。Python對象可以以pickle文件的形式存儲(chǔ),pandas可以直接讀取pickle文件。注意,

    • pickle模塊不安全。最好只unpickle你信任的數(shù)據(jù)。

    代 碼

    1.csv讀取

    dtypes?=?{"row_id":?"int64","timestamp":?"int64","user_id":?"int32","content_id":?"int16","content_type_id":?"boolean","task_container_id":?"int16","user_answer":?"int8","answered_correctly":?"int8","prior_question_elapsed_time":?"float32",?"prior_question_had_explanation":?"boolean" }data?=?pd.read_csv("../input/riiid-test-answer-prediction/train.csv",?dtype=dtypes)#?Train?size:?(101230332,?10) #?CPU?times:?user?8min?15s,?sys:?11.7?s,?total:?8min?27s #?Wall?time:?9min?24s

    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?s

    3.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?s

    4.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?ms

    5.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?s

    6.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

    小 結(jié)

    • csv的文件存儲(chǔ),在讀取的時(shí)候是最為消耗時(shí)間的;如果數(shù)據(jù)大的話不建議存儲(chǔ)為csv形式;

    • jay文件是讀取最快的,相較于其他的快了幾百倍,比csv則快了千萬倍;

    • feather,hdf5,parquet和pickle也都很快,比csv文件的讀取快10倍不止。

    參考文獻(xiàn)

  • 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

  • 往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯溫州大學(xué)《機(jī)器學(xué)習(xí)課程》視頻 本站qq群851320808,加入微信群請掃碼:

    總結(jié)

    以上是生活随笔為你收集整理的【Python】大数据存储技巧,快出csv文件10000倍!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。