一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

如何分析海量數(shù)據(jù)

  前一陣子分析了一個(gè)將近1TB的數(shù)據(jù)群(gz文件,壓縮率10%)。因?yàn)榈谝淮畏治鋈绱司薮蟮臄?shù)據(jù),沒(méi)有經(jīng)驗(yàn),所以浪費(fèi)了許多時(shí)間。下面是我整理的一些經(jīng)驗(yàn),方便后者。

  下載數(shù)據(jù)

Q:怎么自動(dòng)下載多個(gè)文件?

這是我遇到的第一個(gè)問(wèn)題。當(dāng)數(shù)據(jù)量很大時(shí),一般都會(huì)分成很多個(gè)文件存放。這時(shí)下載文件比較麻煩。

A:用Wget命令。Windows下花費(fèi)一點(diǎn)時(shí)間去下載安裝。但之于手動(dòng)下載,能省不少時(shí)間。

我提供兩種方式方式下載文件,

a)用Wget的遞歸下載選項(xiàng) “-r”。一般命令如下

wget –r http://<下載數(shù)據(jù)的根目錄>/  -o <下載記錄文件名>  -np

因?yàn)檫f歸下載沒(méi)法控制進(jìn)度,所以建議不一要次遞歸下載太多的文件

b)用Bat+Wget,多次執(zhí)行Wget。一般命令如下

wget –r http://<下載數(shù)據(jù)的根目錄分支1>/  -o <下載記錄文件名>  -np

wget –r http://<下載數(shù)據(jù)的根目錄分支2>/  -o <下載記錄文件名>  -np

wget –r http://<下載數(shù)據(jù)的根目錄分支3>/  -o <下載記錄文件名>  -np

…… ……

wget –r http://<下載數(shù)據(jù)的根目錄分支N>/  -o <下載記錄文件名>  -np

用Bat可以降低出錯(cuò)帶來(lái)的影響。

另外,Wget可以通過(guò) –A 選項(xiàng)來(lái)指定希望下載的文件的后輟,通過(guò) –P 選項(xiàng)來(lái)指定下載文件存放路徑。更多命令,參見(jiàn)wget -h

Q:這速度。。。什么時(shí)候才能下完?

網(wǎng)速永遠(yuǎn)是個(gè)瓶頸

A:如果下載服務(wù)很遠(yuǎn)的話,你應(yīng)該考慮代理。wget設(shè)置代理的方式如下

set http_proxy=http://<代理服務(wù)器>

不要忘了多開(kāi)幾個(gè)進(jìn)程,20個(gè)試試?

  打開(kāi)文件

Q:怎么打開(kāi)文本文件

這不是弱智問(wèn)題。你用記事本打開(kāi)一個(gè)1000MB的文件試試

A:LTF viewer

Large Text File viewer, 打開(kāi)速度會(huì)讓你驚奇

Q:怎么打開(kāi)二進(jìn)制文件

A:Hex Editor Neo

你可以通過(guò)下面方式來(lái)選擇進(jìn)制:

右擊數(shù)據(jù)區(qū) => Display As => Hex|Decimal|Octal|Binary|Float|Double

你可以通過(guò)下面方式來(lái)選擇按多少字節(jié)顯示:

右擊數(shù)據(jù)區(qū) => Group By => Bytes|Words|Double|Quad

  編程語(yǔ)言

當(dāng)數(shù)據(jù)量很大時(shí),選擇語(yǔ)言要慎重了。因?yàn)椴煌Z(yǔ)言有不同的特點(diǎn),你要在編程時(shí)間和運(yùn)行時(shí)間之間權(quán)衡。

模型測(cè)試

開(kāi)始時(shí),一般挑幾個(gè)小的數(shù)據(jù)進(jìn)行測(cè)試,獲取第一份分析結(jié)果。這時(shí)當(dāng)然希望能快速編程實(shí)現(xiàn)。腳本語(yǔ)言是一個(gè)很好的選擇,比如Python

大量處理

開(kāi)始遍歷處理所有數(shù)據(jù)時(shí),用腳本語(yǔ)言來(lái)處理就不太合適了。因?yàn)槟_本語(yǔ)言的運(yùn)行時(shí)間不能讓人接受。另外,還有內(nèi)存使用,文件讀寫(xiě)這些你都沒(méi)法控制。不幸的是,很少語(yǔ)言會(huì)為你處理海量文件做優(yōu)化。

這時(shí),C/C++是最好的選擇。

結(jié)果展示

漫長(zhǎng)的等待終于過(guò)去了,眼看就要出結(jié)果了。如果你還執(zhí)著于陪伴你度過(guò)漫長(zhǎng)等待的C/C++的話,你遲早會(huì)沮喪的。

我嘗試了很多方式之后,得出的結(jié)論是,讓Matlab來(lái)接手C/C++。Matlab能輕而易舉地展示大量數(shù)據(jù)。更重要的是Matlab支持讀取二進(jìn)制文件。

filename = 'out.bin';        % binary file
fid = fopen( filename );
data = fread( fid, itemsNumber, '*uint32');
fclose(fid);

  算法

一次性讀文件

我已經(jīng)測(cè)試過(guò)好幾次了,一次性讀取文件比一行一行讀文件至少快五倍

記住O(N)

這時(shí)你要好好考慮算法的復(fù)雜度了。任何O(N2)的算法都不可取。

必要的時(shí)候可以通過(guò)空間來(lái)?yè)Q時(shí)間。通常哈希表能節(jié)省不少時(shí)間。

并行處理

溫習(xí)一下并行算法。這比等待單線程程序好很多。

可以考慮在GPU上跑程序。當(dāng)然,內(nèi)存和文件讀取時(shí)間更可能是瓶頸。

內(nèi)存、CPU、磁盤(pán)讀取速度,誰(shuí)是瓶頸,任務(wù)管理器知道。

優(yōu)化核心代碼

通常80%的時(shí)間在運(yùn)行20%的代碼。所以有空的話優(yōu)化下經(jīng)常經(jīng)常執(zhí)行的代碼。

分布式保存

把分析結(jié)果存在一個(gè)文件中是一個(gè)很糟糕的決定。這會(huì)為后面處理帶來(lái)很多麻煩。比如并行處理,文件過(guò)大等。

二進(jìn)制方式保存中間數(shù)據(jù)

二進(jìn)制方式存放通常能省一半的磁盤(pán)空間。這同時(shí)意味著減少一半的寫(xiě)硬盤(pán)時(shí)間和讀硬盤(pán)時(shí)間。當(dāng)然,還有文本轉(zhuǎn)換時(shí)間。

還有個(gè)重要細(xì)節(jié)要注意:在Windows中,讀寫(xiě)文件的方式要改成”rb”和”wb”。要不然莫名的Bug遲早要發(fā)生,但不一定能找到。

  運(yùn)行

Debug Vs Release

別忘了,最終運(yùn)行時(shí)把編譯方式換成Release。但是剛改完程序的話,建議先用Debug模式試跑一下。這樣能定位運(yùn)行時(shí)異常。

批處理

批處理是降低運(yùn)行出錯(cuò)風(fēng)險(xiǎn)的很好的方式。因?yàn)槟悴淮_定程序能正常結(jié)束。所以一段一段執(zhí)行程序是一個(gè)很好的選擇。如果某個(gè)地方出問(wèn)題的話就不用重新運(yùn)行前面的程序了。

斷言

當(dāng)數(shù)據(jù)量很大時(shí),很難保證輸入是合法的。另一種情況是,數(shù)據(jù)是合法的,但我們欠考慮了。這時(shí)斷言就顯得很重要了。斷言回增加運(yùn)行時(shí)間,但總比花大量時(shí)間得到一個(gè)錯(cuò)誤結(jié)果好。

記錄運(yùn)行結(jié)果到文件

前面提到,數(shù)據(jù)量很大時(shí),很難保證程序正常結(jié)束。一般,很少人會(huì)在顯示器旁坐等輸出結(jié)果。把運(yùn)行情況定時(shí)記錄到文件是非常必要的。

另外,不要忘了fclose();

  附:64位編程問(wèn)題

數(shù)據(jù)量很大時(shí),內(nèi)存通常是不夠用的。有一個(gè)常識(shí)必須知道:32位程序的最大尋址空間是2GB。如果你要分配接近或者超過(guò)2G內(nèi)存的話,試試64位程序吧。當(dāng)然有兩條件:64位的CPU,64位的操作系統(tǒng)。

下面是編寫(xiě)64位程序的一些經(jīng)驗(yàn)

編譯環(huán)境

如果是解釋型語(yǔ)言,比如Python,則需要下載一個(gè)64位的Python解釋器

如果是編譯型語(yǔ)言,比如C/C++,則需要選擇恰當(dāng)?shù)木幾g平臺(tái)。

比如VS2008中,項(xiàng)目屬性 => Configuration Manager => Platform => New => X64

image內(nèi)存

分配大數(shù)組,應(yīng)該用malloc,而不是直接定義數(shù)組。

sizeof( int )  != sizeof( size_t )

64位程序中,數(shù)組下標(biāo)應(yīng)該換成size_t,常數(shù)也需要強(qiáng)制轉(zhuǎn)換,比如 4GB = 4*(size_t)1000000000000

文件

fwrite一次性寫(xiě)入一個(gè)大于4GB的數(shù)組似乎有些問(wèn)題。

分多次寫(xiě)入文件試試。

it知識(shí)庫(kù)如何分析海量數(shù)據(jù),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 色多多网站在线观看 | 四虎网站在线 | 91中文字幕yellow字幕网 | 岬奈一区二区中文字幕 | 亚洲伊人久久网 | 国产综合久久久久久鬼色 | 国产精品第九页 | 精品一二三区 | 午夜在线免费观看视频 | 国产成人精品一区二区免费 | 亚洲美女性视频 | 欧美 亚洲 综合 卡通 另类 区 | 亚洲综人网 | 伊人99综合 | 小说专区图片专区 | 亚洲人的天堂男人爽爽爽 | 国产精彩对白综合视频 | 一区卡二区卡三区卡视频 | 精品伊人久久大线蕉地址 | 99视频在线国产 | 久久国产精品免费一区二区三区 | 久久精品免视看国产成人2021 | 欧美一区二区三区在线可观看 | 欧美人禽猛交狂配免费看 | 国产91激情对白露脸全程 | 久草小区二区三区四区网页 | 中文字幕福利视频 | 成人亲子乱子伦视频 | 黑人和黑人激情一级毛片 | 午夜黄色网 | 婷婷六月激情在线综合激情 | 99久久精品全部 | 在线国产区 | 日产精品一区二区 | 国产精品久热 | 欧美视频在线观看网站 | 久久精品99无色码中文字幕 | 色鬼网站| 国产色视频一区二区三区 | 久久久国产精品va麻豆 | 中文字幕一区二区三区免费看 |