<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          大數(shù)據(jù)存儲(chǔ)技巧,快出csv文件10000倍!

          共 4238字,需瀏覽 9分鐘

           ·

          2021-06-21 15:06

          點(diǎn)擊左上方藍(lán)字關(guān)注我們



          全網(wǎng)搜集目標(biāo)檢測(cè)相關(guān),人工篩選最優(yōu)價(jià)值內(nèi)容

          編者薦語(yǔ)
          無(wú)論工具包處理數(shù)據(jù)的時(shí)間有多快,在碰到例如10G以上的數(shù)據(jù)時(shí),都還是會(huì)耗費(fèi)一些不可忽視的時(shí)間,快的可能幾十秒,慢的可能幾十分鐘,然后還要進(jìn)行一些特征抽取等。為了降低時(shí)間消耗,我們就需要將這些中間結(jié)果存儲(chǔ)到磁盤(pán),但是不同格式的存儲(chǔ),帶來(lái)的差別是巨大的


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

          • 是否擁有豐富的數(shù)據(jù)處理函數(shù);
          • 是否讀取數(shù)據(jù)夠快;
          • 是否需要額外設(shè)備(例如GPU)的支持等等。

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

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

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

          1. csv
          2. feather
          3. hdf5
          4. jay
          5. parquet
          6. pickle
          數(shù)據(jù)存儲(chǔ)格式對(duì)比


          01


          csv

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

          02


          feather


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

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

          03


          hdf5


          hdf5設(shè)計(jì)用于快速I(mǎ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)勢(shì)。現(xiàn)在parquet與Spark一起廣泛使用。這些年來(lái),它變得更容易獲得和更有效,也得到了pandas的支持。

          06


          pickle

          pickle模塊實(shí)現(xiàn)二進(jìn)制協(xié)議,用于序列化和反序列化Python對(duì)象結(jié)構(gòu)。Python對(duì)象可以以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ù)大的話(huà)不建議存儲(chǔ)為csv形式;
          • jay文件是讀取最快的,相較于其他的快了幾百倍,比csv則快了千萬(wàn)倍;
          • feather,hdf5,parquet和pickle也都很快,比csv文件的讀取快10倍不止。
          參考文獻(xiàn)
          1. Tutorial on reading large datasets
          2. https://docs.python.org/3/library/pickle.html
          3. https://parquet.apache.org/documentation/latest/
          4. https://www.hdfgroup.org/solutions/hdf5


          END



          雙一流大學(xué)研究生團(tuán)隊(duì)創(chuàng)建,專(zhuān)注于目標(biāo)檢測(cè)與深度學(xué)習(xí),希望可以將分享變成一種習(xí)慣!

          整理不易,點(diǎn)贊三連↓

          瀏覽 83
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲成人黄色视频 | 男人天堂网视频 | 色婷婷成人网 | 九热精品 | 日本三级免费 |