丁思蓉?何靜茹?李真


摘? 要:拆分大數據文檔是日常生活中所需的,隨著大數據文檔的增加,選擇拆分行數是一個值得研究的問題。運用PyCharm Community和Python來拆分大文檔,對比分析在不同行數的條件下,大文檔拆分成小文檔所用的數量以及時間。報告了拆分數量適中是最佳的,文檔數據量越大,消耗的時間越不穩定。通過對同一文檔拆分最短時間的拆分行數進行研究,得到拆分時間規律,選擇最佳的拆分行數,以此提高拆分文檔效率。
關鍵詞:拆分大數據文檔;對比分析;拆分行數
中圖分類號:TP309? ? ? ? ?文獻標識碼:A文章編號:2096-4706(2022)06-0107-03
Research on Big Data Document Splitting Rule Based on Python
DING Sirong, HE Jingru, LI Zhen
(Chengdu Jincheng College, Chengdu? 611731, China)
Abstract: Splitting big data documents is necessary in daily life. With the increase of big data documents, choosing the number of splitting rows is a problem worthy of study. This paper uses the PyCharm Community and Python to split large documents, compares and analyzes the quantity and time used to split large documents into small documents under the condition of different numbers of rows. It is reported that a moderate number of splitting rows is the best, and the larger the amount of document data, the more unstable the time consumed. By studying the number of splitting rows in the shortest time of splitting the same document, the rule of splitting time is obtained, and the best number of splitting rows is selected to improve the efficiency of splitting the document.
Keywords: splitting big data document; comparative analysis; the number of splitting rows
0? 引? 言
人類數據庫以18個月為周期,倍數增長,大文檔越來越多,在進行數據庫處理領域,業內通常將大于10 GB的文本定義為大數據量表。對大文本的數據處理與分析會首先對文件進行拆分,第一提高電腦運行效率,第二提高分析速度,第三方便進行傳輸。對于大數據量表的拆分。首先需要根據實際情況確定拆分原則,可以按照不同的地域、時間切片等方式進行拆分。在方法上,可以以時間的遞增而表的記錄數量均勻遞增的數據庫問題,可以使用時間切片的方式來解決。把一個大數據量以時間節點拆分成多個小數據量表,分布到不同的硬盤或其他存儲介質中,大大提升了查詢速度[1]。第二,會按照不同的表拆分到不同的數據庫(主機)之上,或根據表中的數據的邏輯關系,浮同一個表中的數據按照某種條件拆分到多臺數據庫(主機)上面[2]。或者在進行總段拆分時宜采用自動拆分和交互拆分相結合的方式進行,通過“一分為二”的方式,把一個總段按給定的分界面拆分成二部分,再對拆分出的部分繼續“一分為二”,經過幾次“一分為二”,就可以拆分成最終的分段[3]。以及進行 K-means聚類,產生n個簇,從每個簇中取出一個樣本構成子集,每個子集與少數類樣本一起構成m訓練子集[4]。
由于大數據量表容量過大,使用傳統的軟件無法處理,比如EXCEL,NAVICAT,SPSS等。因此需要使用對大數據量表更具處理能力的Python數據模塊[5]。本論文研究在使用Python數據模塊拆分大數量表時的拆分效率問題。在不同的拆分數量上,如何消耗的時間最短。
本次研究的大數據量表容量為9.82 GB,CSV逗號分隔符格式,包含1億7百多萬條數據。現有EXCEL軟件最多現實1 048 576行數據,無法將文檔完全顯示。使用Python的Pandas數據分析庫開打文檔的時間約為5~10分鐘,效率太低。因此只能選擇先將文檔進行拆分,小于EXCEL的最大顯示行數后,才進行分析。
文檔拆分思路為,先使用Python的文檔映射功能,逐行掃描數據量表。達到100萬上限后,將其保存為一個新的文檔,在繼續掃描下一個100萬行數據。以此類推,完成大數據量表的拆分。
在進行拆分程序運行的過程中,我們發現不同的掃描行數,不同的拆分文檔數,其消耗的時間不同。例如,掃描行數多,保存時長長,但拆分文檔數少;相反掃描行數少,保存時長短,但拆分文檔數量多。那么掃描行數,保存時長和拆分文檔數如何搭配,能夠讓拆分文檔效率最高呢?
為此我們進行了一系列的實驗。將掃描行數按照10萬、20萬、30萬到100萬行分成10檔,使用不同的電腦進行拆分,記錄每個文檔的拆分時間。試圖找出掃描行數,保存時間和拆分文檔數之間的規律。由于拆分10行數據文檔的時間低于1秒,為了分析和記錄的便捷,記錄時間統一精確到毫秒。5D2058FE-E3C3-4CC2-8DA5-F9965BB54F4A
1? 實驗過程
以下我們從工具配置、實驗實現過程和結果展示三個方面還原整個實驗的過程。
1.1? 工具配置
所使用的筆記本電腦為Thinkpad e14和華為MateBook 14。兩臺電腦的硬件配置如下:
華為MateBook 14處理器為Intel(R)Core(TM) i5-10210U CPU @ 1.60 GHz 2.11 GHz,系統類型為64位操作系統,基于x64的處理器;
ThinkPad E14的處理器為11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40 GHz (8 CPUs),~2.4 GHz,系統類型為64位操作系統。
1.2? 實現過程
我們使用PyCharm Community Edition 2020.2.1 x64、Python 3.8 (64-bit)和2019版Excel。使用PyCharm編寫文檔拆分程序,采集每一個拆分文檔的開始和結束時設定時間點,并將時間精度設為毫秒。在代碼中設置拆分文檔大小參數,用于實驗在不同文檔大小下的開始結束時間點。在運行軟件之前需要停止所有的后臺以及Wi-Fi信號運行軟件,保證整個實驗只有“拆分行數”這一個因變量,防止后臺的軟件在運行時對程序運行造成影響。例如拆分時間的圖像波動十分厲害,說明此時的數據不穩定,造成的主要原因就是此時拆分每一個文件的時間的自變量會不僅僅是拆分行數的不同,也包括電腦運行PyCharm的速度不一樣,當自變量超過兩個的時候,得出的因變量則無法說明我們的數據是“拆分不同行數文檔所用的時間”。
我們以10萬到100萬行,10個檔次作為文檔大小采集點執行程序,收集每一個文檔拆分的開始時間、結束時間。將所有數據轉入Excel中,使用每一個文檔的結束時間與開始時間相減得到文檔拆分消耗時間。使用程序的結束時間與考試時間相減得到文檔拆分的總消耗時間。
由于10萬條文檔和100萬條文檔的消耗時間存在數量級的差異,因此需要對數據進行標準化處理。
1.3? 結果展示
以下展示華為MateBook 14的拆分消耗時間。10到30萬行的消耗時間折線圖的圖像均在一定的區域內波動。40萬行的消耗時間折線圖后半段呈向上的趨勢,所以用40萬行來拆分時,拆分到后期時所花費的時間相應會增加。50萬行的消耗時間折線圖相較于前四個圖像更加不穩定。60萬行的消耗時間折線圖圖像在后半段時間出現了一段快速下降的區域,當下降到最低點時圖像開始呈直線上升,直到后半段圖像才趨于穩定,在一定的范圍內波動。70萬行的消耗時間折線圖整體相對穩定,中間在拆分第73到79個文件時所消耗的時間明顯高于其他值。80萬行到100萬行的圖像變得更加不穩定,消耗時間的波動性很強。
綜合10萬到100萬的圖表來看,100萬到80萬中,會有幾個突變值,不穩定,且拆分行數越大,拆分文檔的時間越不穩定,而70萬到10萬這個區間中,拆分文檔的時間則趨于穩定,都在一個穩定的趨于范圍內波動。
以下圖1到圖2依次為華為MateBook14和ThinkPad E14 Gen2聯想筆記本電腦10萬到100萬行處理消耗時間的匯總折線圖。
由以上時間消耗記錄可以看出當9.82 GB存儲數據的容量大小的文件拆分時,隨著行數的上升,每次大文檔拆分出來的文件數量逐步遞減。
華為的圖像中拆分的數量從10萬到70萬行時,所消耗的時間向上呈拋物線的形式,其中的最低點在20萬到30萬行間,且10萬到20萬的下降速率比20萬到70萬行的上升速率大,而在70萬到90萬行中,隨著數量的增加,所消耗的時間則減少,其中從70萬到80萬行的時間減少最多,80萬已經低于10萬到70萬行拋物線的最低點,80萬到90萬行有輕微的下降趨勢,90萬行是所有數據的最低點,90萬到100萬行之間所用的時間有輕微的上升。
聯想的圖像中在10萬到20萬行呈下降趨勢,20萬到80萬行的區間曲線的波動不大,拆分的時間相似,在80萬到90萬行呈上升的趨勢后趨于穩定。
ThinkPad E 14 Gen2聯想筆記本電腦整體比華為MateBook14的所用時間短。華為MateBook14在20萬到10萬拆分每一個文檔的時間總體呈上升趨勢,ThinkPad E 14 Gen2聯想則在20萬到10萬一直在一定的范圍內跳動。
2? 實驗結論
通過使用編程方法對大數據文檔進行拆分的實驗分析,繪制在不同數據量大小的消耗時間和文檔數量的折線圖,我們可以得到以下三個結論。
2.1? 大數據文檔拆分所消耗的時間與硬件有關
在實驗過程中,華為電腦所消耗的時間普遍高于聯想,兩臺電腦在拆分70萬到100萬行的規律更是呈明顯相反的趨勢。在不同硬件的支持下,無論是軟件啟動的速度還是執行命令的時間都產生不小的影響。
2.2? 拆分時間規律與傳統認知差異較大
通常我們認為單個文件小、拆分數量多和單個文件大、拆分數量少,兩種情況所消耗的時間相似且較多;單個文件適中、拆分數量適中所消耗的時間應該最小。但事實卻不一樣,總時間消耗的最低值沒有出現在文檔大小和數量適中的情況,不同的電腦總時間消耗的最低值也不同。
2.3? 拆分時間規律與文檔數據量有關
文檔數據量越大,消耗時間波動性越小。拆分一個文件的時間短,在由于在執行文檔拆分程序過程中,電腦很容易受到外界干擾。并且單個文件越小,拆分時間越短受干擾的程度越大,所得到的時間圖像波動性更強。
3? 結? 論5D2058FE-E3C3-4CC2-8DA5-F9965BB54F4A
本文利用Python對大數據文檔的拆分進行了分析,得到了不同的拆分行數對拆分時間的影響。研究結果表明,電腦硬件、文檔數據量對拆分時間的影響較為復雜,從提高拆分速率的角度來看,盡可能選擇高配置的電腦將文件拆分為大容量文檔。
通過使用兩臺不同知名品牌的筆記本電腦,對同一份文檔執行相同代碼程序可以看出,不論消耗的時間還是規律都呈現出了完全不同的變化。硬件配置的差異對處理效率有明顯影響,在運行同一個文件時,前后兩次處理的時間差異較大,需要根據電腦的實際情況進行調整。拆分同一個文檔中數據量越大越容易觀測到異值,便于重新進行實驗,最終得到的圖像也就更加可靠穩定,文檔數據量小,不容易確定數據的波動范圍以及趨勢,實驗的容錯性也就越低,所以在沒有數據最大執行容量大小的限制下,需要盡可能將文檔拆分為大容量文檔。
由于本次實驗只是用兩臺電腦進行數據實驗,不具有普遍性,并且無法將所有的干擾全部清除,我們只能將其中一些干擾排除在外,例如軟件的啟動時間和其他軟件占用資源等,所以可能會存在較大的誤差。后續會使用更多的電腦作為樣本采集拆分數據,并通過數學建模的方式從數據中提取規律,找到在不同情況下的最有效率解。
參考文獻:
[1] 馬小麗,姜贊梅.MS SQL Server2000中大數據量表的拆分與實現 [J].電氣傳動自動化,2013,35(5):46-48+56.
[2] 侯佳佳,喬運華,卜建國,等.基于分布式數據庫數據處理的研究 [J].制造業自動化,2013,35(1):94-96.
[3] 鄭斌華,陶自強,楊銀官.船舶總段拆分模型數據重用技術研究與應用[C]//2013年CAD/CAM學術交流會議論文集,2013-06,中國貴州貴陽,2013:144-147.
[4] 杜紅樂,張燕.基于拆分集成的不均衡數據分類算法 [J].計算機系統應用,2017,26(8):223-226.
[5] 黃蓉美,宋永生.基于Python的植物標本采集實訓平臺 [J].現代信息科技,2021,5(17):35-37.
作者簡介:丁思蓉(2003.12—),女,漢族,四川自貢人,本科在讀,研究方向:大數據技術與分析。
收稿日期:2022-02-075D2058FE-E3C3-4CC2-8DA5-F9965BB54F4A