本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種多維交叉數(shù)據(jù)處理方法及裝置。
背景技術(shù):
數(shù)據(jù)處理時(shí)經(jīng)常要進(jìn)行多維交叉計(jì)算,即對(duì)數(shù)據(jù)維度的不同取值的組合(包括維度取值為“所有”的情況)計(jì)算平均值,并存入數(shù)據(jù)庫以方便查詢。
一個(gè)例子如圖1所示:每條原始數(shù)據(jù)包括四個(gè)維度和指標(biāo),四個(gè)維度分別為:省、運(yùn)營商、網(wǎng)絡(luò)制式、操作系統(tǒng)。每個(gè)維度都有一個(gè)或多個(gè)取值,比如網(wǎng)絡(luò)制式這個(gè)維度的取值包括4個(gè):2g、3g、4g、wifi;在計(jì)算過程中還將增加取值為所有值,原始數(shù)據(jù)中并不會(huì)出現(xiàn)所有值這個(gè)取值;其它維度也會(huì)增加取值為所有值的情況。所述指標(biāo)根據(jù)需求可以自行設(shè)置為某個(gè)參數(shù)的值或某幾個(gè)參數(shù)的計(jì)算值,比如為網(wǎng)絡(luò)質(zhì)量等;在用于進(jìn)行多維交叉計(jì)算的原始數(shù)據(jù)中,所述指標(biāo)為具體的一個(gè)數(shù)字。
本例子中的計(jì)算是指求指標(biāo)的平均值;多維交叉計(jì)算是指針對(duì)維度不同取值的每種組合,分別求出每個(gè)維度的取值都匹配該種組合的一條或多條原始數(shù)據(jù)中指標(biāo)的平均值。當(dāng)組合中一個(gè)維度的取值為所有值時(shí),該維度為任一取值時(shí)都匹配。
假設(shè)原始數(shù)據(jù)只有圖1中所示的5條,比如對(duì)于省為“湖北省”,運(yùn)營商為“中國聯(lián)通”,網(wǎng)絡(luò)制式為“2g”,操作系統(tǒng)為“andriod”這一組合,指標(biāo)的平均值為(106+67)/2=86.5,可以向下取整為86。再比如對(duì)于省的取值為所有值,即為:“所有省”,運(yùn)營商為“中國移動(dòng)”,網(wǎng)絡(luò)制式為“2g”,操作系統(tǒng)為“ios”這一組合,是對(duì)每個(gè)省的中國移動(dòng)、2g、ios的原始數(shù)據(jù)中的指標(biāo)求平均值。再比如對(duì)于省為“所有省”,運(yùn)營商為“所有運(yùn)營商”, 網(wǎng)絡(luò)制式為“所有網(wǎng)絡(luò)制式”,操作系統(tǒng)為“所有操作系統(tǒng)”這一組合,則是對(duì)四個(gè)維度的每種取值的數(shù)據(jù)中的指標(biāo)求平均值,也就是將所有原始數(shù)據(jù)中的指標(biāo)全部相加求平均值,得到79.2,取整為79。維度取值為其它組合時(shí)的計(jì)算可以類推,這里不再贅述。
多維交叉時(shí),四個(gè)維度的不同取值的組合的總個(gè)數(shù)是每個(gè)維度的取值個(gè)數(shù)(包括取值為所有值的情況)的乘積,比如省的取值有a個(gè),運(yùn)營商的取值有b個(gè)、網(wǎng)絡(luò)制式的取值有c個(gè)、操作系統(tǒng)的取值有d個(gè),則維度取值的組合的總個(gè)數(shù)為a×b×c×d個(gè)。
多維交叉計(jì)算后,將計(jì)算結(jié)果(每種維度取值組合和對(duì)應(yīng)的指標(biāo)的平均值)存入數(shù)據(jù)庫以方便查詢;為了提升海量數(shù)據(jù)查詢效率及方便擴(kuò)展,本例子中選用nosql數(shù)據(jù)庫。
如圖2所示,現(xiàn)有的多維交叉數(shù)據(jù)處理的具體流程如下:
首先建立hashmap,開始為空。
然后針對(duì)每條數(shù)據(jù)分別生成鍵值對(duì)。對(duì)一條數(shù)據(jù)生成鍵值對(duì)時(shí),以該數(shù)據(jù)中每個(gè)維度的值的組合(字符串形式)作為key(鍵名),并且增加維度中的一或多個(gè)取值為所有值的key;這些key均以指標(biāo)作為value(鍵值);比如對(duì)于數(shù)據(jù):“湖北省,中國聯(lián)通,2g,andriod:106”這一數(shù)據(jù),在建立鍵值對(duì)時(shí),除了建立key為“湖北省,中國聯(lián)通,2g,andriod”、value為“106”的鍵值對(duì)以外,還建立省、運(yùn)營商、網(wǎng)絡(luò)制式、操作系統(tǒng)中一或多個(gè)維度的取值為所有值的key,value均為106的鍵值對(duì)(共15個(gè));比如只有省的取值為所有值時(shí),key為“所有省,中國聯(lián)通,2g,andriod”;再比如省和運(yùn)營商的取值為“所有”時(shí),key為“所有省,所有運(yùn)營商,2g,andriod”;再比如四個(gè)維度的取值均為所有值時(shí),key為“所有省,所有運(yùn)營商,所有網(wǎng)絡(luò)制式,所有操作系統(tǒng)”;以此類推。
對(duì)于每個(gè)鍵值對(duì),在hashmap中查找是否有相同的key,如果沒有,則增加該key和value;如有,則計(jì)算hashmap中相同key的value和該鍵值對(duì)中vlaue的平均值,并更新hashmap中所述相同key的value。
全部數(shù)據(jù)保存完成后,將最終的hashmap的所有記錄寫入數(shù)據(jù)庫。
現(xiàn)有的計(jì)算方法主要有以下幾個(gè)缺點(diǎn):
(1)存儲(chǔ)成本高
比如上例中,每條數(shù)據(jù)有4個(gè)維度,平均有35個(gè)字節(jié);以34個(gè)省,4個(gè)運(yùn)營商,4個(gè)網(wǎng)絡(luò)制式,3個(gè)操作系統(tǒng)為例進(jìn)行多維交叉計(jì)算,每個(gè)維度的取值包括所有值在內(nèi),則不同取值的組合的總個(gè)數(shù)為35×5×5×4=3500,即:向數(shù)據(jù)庫寫入計(jì)算結(jié)果時(shí),平均一次要寫入3500條記錄,3500×35=122500字節(jié),在海量實(shí)時(shí)分析中,以分鐘粒度進(jìn)行多維交叉計(jì)算,平均每月要寫入5.3g到數(shù)據(jù)庫,實(shí)現(xiàn)應(yīng)用中,維度通常要遠(yuǎn)多于4個(gè),帶來的存儲(chǔ)成本遠(yuǎn)高于此。
(2)計(jì)算成本高
hashmap實(shí)際為數(shù)組和鏈表的結(jié)合體,數(shù)組中的每一項(xiàng)是一個(gè)鏈表。針對(duì)每一個(gè)key,都需要根據(jù)hash(哈希)函數(shù)計(jì)算其對(duì)應(yīng)的hashcode,找到數(shù)組中對(duì)應(yīng)的元素后,再通過key的equals方法在對(duì)應(yīng)位置的鏈表中找到需要的元素。由于兩個(gè)不同的維度取值組合也有可能得到的hashcode相同,該情況下會(huì)造成hashmap中的數(shù)據(jù)沖突,明顯影響效率。另外,在增加取值為所有值的維度取值組合對(duì)應(yīng)的鍵值對(duì)時(shí),需要重新構(gòu)造大量字符串,并計(jì)算hashcode,也非常影響效率。再者,hashmap與mapreduce結(jié)合時(shí)需要進(jìn)行額外的大量處理,將會(huì)增加計(jì)算成本。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┝艘环N多維交叉數(shù)據(jù)處理方法及裝置,能夠提高處理效率。
本申請(qǐng)采用如下技術(shù)方案。
一種多維交叉數(shù)據(jù)處理方法,包括:
對(duì)于待進(jìn)行多維交叉計(jì)算的每條數(shù)據(jù)分別進(jìn)行如下操作:對(duì)于維度取值的多種組合,按照維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系分別將每種維度取值組合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值,所述維度取值的多種組合包括:該條數(shù)據(jù)中的維度取值組合、以及一或多個(gè)維度取值改為所有值時(shí)的維度取值組合;將轉(zhuǎn)換成的數(shù)值分別作為不同鍵值對(duì)的鍵名,將該條數(shù)據(jù)的指標(biāo)作為每個(gè)鍵值對(duì) 的鍵值;
對(duì)于待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì),分別計(jì)算每個(gè)鍵名對(duì)應(yīng)的鍵值的平均值。
可選地,所述按照維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系分別將每種維度取值組合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值包括:
對(duì)于每種維度取值組合,分別進(jìn)行下述操作:
按照預(yù)定順序?qū)⒚總€(gè)維度的取值對(duì)應(yīng)的預(yù)定位數(shù)的數(shù)值連接在一起,以連接結(jié)果作為該種維度取值組合對(duì)應(yīng)的數(shù)值;其中,一個(gè)維度中,包含取值為所有值的情況在內(nèi)的每個(gè)取值與數(shù)值之間的對(duì)應(yīng)關(guān)系為一一對(duì)應(yīng)。
可選地,全部維度中,取值為所有值時(shí)對(duì)應(yīng)的數(shù)值為0;
所述對(duì)于一或多個(gè)維度取值改為所有值時(shí)的維度取值組合,所述按照預(yù)定順序?qū)⒚總€(gè)維度的取值對(duì)應(yīng)的數(shù)值連接在一起包括:
在根據(jù)數(shù)據(jù)中的維度取值組合得到的連接結(jié)果中,對(duì)取值改為所有值的維度對(duì)應(yīng)的位進(jìn)行置0操作。
可選地,所述對(duì)于待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì),分別計(jì)算每個(gè)鍵名對(duì)應(yīng)的鍵值的平均值包括:
在待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì)中,按照鍵名進(jìn)行鍵值累加以及鍵值對(duì)個(gè)數(shù)的統(tǒng)計(jì);對(duì)于每個(gè)鍵名,將該鍵名對(duì)應(yīng)的累加結(jié)果除以對(duì)應(yīng)的個(gè)數(shù),得到該鍵名對(duì)應(yīng)鍵值的平均值。
可選地,所述鍵名為整數(shù);
所述按照鍵名進(jìn)行鍵值累加以及鍵值對(duì)個(gè)數(shù)的統(tǒng)計(jì)包括:
對(duì)于每個(gè)鍵值對(duì),分別以該鍵值對(duì)的鍵名為索引在二維數(shù)組中找到該鍵名對(duì)應(yīng)的累加結(jié)果和個(gè)數(shù);將所述個(gè)數(shù)加1;將鍵值對(duì)中的鍵值與所述累加結(jié)果相加,將相加的結(jié)果作為新的累加結(jié)果保存。
一種多維交叉數(shù)據(jù)處理裝置,包括:
鍵值對(duì)生成模塊,用于對(duì)于待進(jìn)行多維交叉計(jì)算的每條數(shù)據(jù)分別進(jìn)行如 下操作:對(duì)于維度取值的多種組合,按照維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系分別將每種維度取值組合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值,所述維度取值的多種組合包括:該條數(shù)據(jù)中的維度取值組合、以及一或多個(gè)維度取值改為所有值時(shí)的維度取值組合;將轉(zhuǎn)換成的數(shù)值分別作為不同鍵值對(duì)的鍵名,將該條數(shù)據(jù)的指標(biāo)作為每個(gè)鍵值對(duì)的鍵值;
計(jì)算模塊,用于對(duì)于待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì),分別計(jì)算每個(gè)鍵名對(duì)應(yīng)的鍵值的平均值。
可選地,所述鍵值對(duì)生成模塊按照維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系分別將每種維度取值組合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值包括:
所述鍵值對(duì)生成模塊對(duì)于每種維度取值組合,分別進(jìn)行下述操作:
按照預(yù)定順序?qū)⒚總€(gè)維度的取值對(duì)應(yīng)的預(yù)定位數(shù)的數(shù)值連接在一起,以連接結(jié)果作為該種維度取值組合對(duì)應(yīng)的數(shù)值;其中,一個(gè)維度中,包含取值為所有值的情況在內(nèi)的每個(gè)取值與數(shù)值之間的對(duì)應(yīng)關(guān)系為一一對(duì)應(yīng)。
可選地,全部維度中,取值為所有值時(shí)對(duì)應(yīng)的數(shù)值為0;
所述鍵值對(duì)生成模塊對(duì)于一或多個(gè)維度取值改為所有值時(shí)的維度取值組合,所述按照預(yù)定順序?qū)⒚總€(gè)維度的取值對(duì)應(yīng)的數(shù)值連接在一起包括:
所述鍵值對(duì)生成模塊在根據(jù)數(shù)據(jù)中的維度取值組合得到的連接結(jié)果中,對(duì)取值改為所有值的維度對(duì)應(yīng)的位進(jìn)行置0操作。
可選地,所述計(jì)算模塊對(duì)于待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì),分別計(jì)算每個(gè)鍵名對(duì)應(yīng)的鍵值的平均值包括:
所述計(jì)算模塊在待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì)中,按照鍵名進(jìn)行鍵值累加以及鍵值對(duì)個(gè)數(shù)的統(tǒng)計(jì);對(duì)于每個(gè)鍵名,將該鍵名對(duì)應(yīng)的累加結(jié)果除以對(duì)應(yīng)的個(gè)數(shù),得到該鍵名對(duì)應(yīng)鍵值的平均值。
可選地,所述鍵名為整數(shù);
所述計(jì)算模塊按照鍵名進(jìn)行鍵值累加以及鍵值對(duì)個(gè)數(shù)的統(tǒng)計(jì)包括:
所述計(jì)算模塊對(duì)于每個(gè)鍵值對(duì),分別以該鍵值對(duì)的鍵名為索引在二維數(shù)組中找到該鍵名對(duì)應(yīng)的累加結(jié)果和個(gè)數(shù);將所述個(gè)數(shù)加1;將鍵值對(duì)中的鍵值與所述累加結(jié)果相加,將相加的結(jié)果作為新的累加結(jié)果保存。
本申請(qǐng)包括以下優(yōu)點(diǎn):
本申請(qǐng)至少一個(gè)備選方案通過將維度取值組合按照一一對(duì)應(yīng)的關(guān)系轉(zhuǎn)換為數(shù)值,轉(zhuǎn)換結(jié)果可以保證和維度取值組合一一對(duì)應(yīng),不會(huì)出現(xiàn)因?yàn)閿?shù)據(jù)沖突而影響處理效率的情況。
本申請(qǐng)的又一個(gè)備選方案將維度取值組合轉(zhuǎn)換為整數(shù),能夠進(jìn)一步提高處理效率,并且在存儲(chǔ)到數(shù)據(jù)庫時(shí),可以大大減少存儲(chǔ)所需要的空間。本備選方案的一種實(shí)施方式中,以整數(shù)作為索引保存數(shù)據(jù),可以進(jìn)一步減少存儲(chǔ)空間,而且可以方便采用mapreduce進(jìn)行并行處理。
本申請(qǐng)又一個(gè)備選方案將原始數(shù)據(jù)的維度取值組合先轉(zhuǎn)換為整數(shù),在針對(duì)每條數(shù)據(jù)構(gòu)建一或多個(gè)維度取值為所有值的鍵值對(duì)時(shí),由于整數(shù)在計(jì)算機(jī)中通常以二進(jìn)制形式存在,因此不像現(xiàn)有技術(shù)中hashmap需要重新構(gòu)建大量字符串,而是只需要簡(jiǎn)單的位運(yùn)算(比如但不限于置0運(yùn)算)即可完成,提高了處理效率,能夠適應(yīng)海量數(shù)據(jù)實(shí)時(shí)處理的需求。
當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品必不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
附圖說明
圖1是現(xiàn)有技術(shù)進(jìn)行多維交叉計(jì)算的原理示意圖;
圖2是現(xiàn)有技術(shù)進(jìn)行多維交叉計(jì)算的過程示意圖;
圖3是實(shí)施例一的多維交叉數(shù)據(jù)處理方法的流程示意圖;
圖4是實(shí)施例一的示例中進(jìn)行多維交叉計(jì)算的示意圖;
圖5是實(shí)施例一的示例中采用mapreduce方式時(shí)的示意圖;
圖6是實(shí)施例二的多維交叉數(shù)據(jù)處理裝置的示意圖。
具體實(shí)施方式
下面將結(jié)合附圖及實(shí)施例對(duì)本申請(qǐng)的技術(shù)方案進(jìn)行更詳細(xì)的說明。
需要說明的是,如果不沖突,本申請(qǐng)實(shí)施例以及實(shí)施例中的各個(gè)特征可 以相互結(jié)合,均在本申請(qǐng)的保護(hù)范圍之內(nèi)。另外,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
在一個(gè)典型的配置中,客戶端或認(rèn)證系統(tǒng)的計(jì)算設(shè)備可包括一個(gè)或多個(gè)處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存(memory)。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。內(nèi)存可能包括模塊1,模塊2,……,模塊n(n為大于2的整數(shù))。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、其他類型的隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、電可擦除可編程只讀存儲(chǔ)器(eeprom),快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
實(shí)施例一、一種多維交叉數(shù)據(jù)處理方法,如圖3所示,包括步驟s110~s120:
s110、對(duì)于待進(jìn)行多維交叉計(jì)算的每條數(shù)據(jù)分別進(jìn)行如下操作:對(duì)于維度取值的多種組合,按照維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系分別將每種維度取值組合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值,所述維度取值的多種組合包括:該條數(shù)據(jù)中的維度取值組合、以及一或多個(gè)維度取值改為所有值時(shí)的維度取值組合;將轉(zhuǎn)換成的數(shù)值分別作為不同鍵值對(duì)的鍵名,將該條數(shù)據(jù)的指標(biāo)作為每個(gè)鍵值對(duì)的鍵值;
s120、對(duì)于待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì),分別計(jì)算每個(gè)鍵名對(duì)應(yīng)的鍵值的平均值。
本實(shí)施例中,如果一或多個(gè)維度取值改為所有值的每種情況都包含在內(nèi),則對(duì)于一條待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)一共會(huì)得到2m個(gè)數(shù)值,m為維數(shù)的個(gè)數(shù);也就是說,針對(duì)每條數(shù)據(jù)會(huì)生成2m個(gè)鍵值對(duì)。以三個(gè)維度的情況為例,比如一個(gè)條數(shù)據(jù)里三個(gè)維度的取值分別為a、b、c,則一或多個(gè)維度取值改為所有值時(shí)的維度取值組合包括:“所有,b,c”、“所有,所有,c”、“所有,b,所有”、“a,所有,c”、“a,所有,所有”、“a,b,所有”,“所有,所有,所有”,一共有7個(gè),加上a,b,c”這一組合,最后一共可以轉(zhuǎn)換成8個(gè)數(shù)值,將這8個(gè)數(shù)值作為key,將指標(biāo)作為value,一共可以得到8個(gè)鍵值對(duì)。
本實(shí)施例中,取值為所有值時(shí),具體的值的內(nèi)容可以自行設(shè)置,比如可以為“所有”、可以為“all”,可以為“所有x(x為維度名,比如“省”)”。
本實(shí)施例中,數(shù)值和維度取值組合是一一對(duì)應(yīng)的,即:每個(gè)key和維度取值組合是一一對(duì)應(yīng)的;一個(gè)鍵名對(duì)應(yīng)的鍵值的平均值即該鍵名對(duì)應(yīng)的維度取值組合的多維交叉計(jì)算結(jié)果。
本實(shí)施例的一種備選方案中,所述按照維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系分別將每種維度取值組合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值可以包括:
對(duì)于每種維度取值組合,分別進(jìn)行下述操作:
按照預(yù)定順序?qū)⒚總€(gè)維度的取值對(duì)應(yīng)的預(yù)定位數(shù)的數(shù)值連接在一起,以連接結(jié)果對(duì)應(yīng)的整數(shù)作為該種維度取值組合對(duì)應(yīng)的數(shù)值;其中,一個(gè)維度中,包含取值為所有值的情況在內(nèi)的每個(gè)取值與數(shù)值之間的對(duì)應(yīng)關(guān)系為一一對(duì)應(yīng)。
本備選方案中,一個(gè)維度中,每個(gè)取值對(duì)應(yīng)的數(shù)值、連接結(jié)果的數(shù)據(jù)類型都可以為整數(shù),在計(jì)算機(jī)中一般以二進(jìn)制形式存在,即int類型的數(shù)據(jù)。
本備選方案中,維度取值對(duì)應(yīng)的數(shù)值的位數(shù)是預(yù)定值,連接時(shí)的順序也是預(yù)定的,因此在所述連接結(jié)果中,每個(gè)維度各自對(duì)應(yīng)于哪幾位是預(yù)定的。
本備選方案的一種例子中,連接結(jié)果以二進(jìn)制形式表示,假設(shè)“省”這 個(gè)維度對(duì)應(yīng)的數(shù)值的預(yù)定位數(shù)(即長度)為5位,預(yù)定順序中“省”這個(gè)維度排在左邊第一個(gè),則連接結(jié)果中從左往右的前5位是“省”的取值對(duì)應(yīng)的數(shù)值,比如維度“省”的取值“湖南省”對(duì)應(yīng)數(shù)值“3”,則在連接結(jié)果中從左往右的前5位是“00011”。
其它備選方案中,也可以預(yù)先保存所有維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系,根據(jù)該對(duì)應(yīng)關(guān)系直接得到維度取值組合對(duì)應(yīng)的數(shù)值。所述數(shù)值的數(shù)據(jù)類型也可以不是整數(shù),而是類型。
本備選方案的一種實(shí)施方式中,全部維度中,取值為所有值時(shí)對(duì)應(yīng)的數(shù)值為0;
本實(shí)施方式中,所述對(duì)于一或多個(gè)維度取值改為所有值時(shí)的維度取值組合,所述按照預(yù)定順序?qū)⒚總€(gè)維度的取值對(duì)應(yīng)的數(shù)值連接在一起包括:
在根據(jù)數(shù)據(jù)中的維度取值組合得到的連接結(jié)果中,對(duì)取值改為所有值的維度對(duì)應(yīng)的位進(jìn)行置0操作。
本實(shí)施方式中,只要先得到原始數(shù)據(jù)的維度取值組合對(duì)應(yīng)的連接結(jié)果,再對(duì)相應(yīng)的位進(jìn)行置0的位運(yùn)算,就可以得到其余2m-1個(gè)維度取值組合(一個(gè)或多個(gè)維度取值為所有值)對(duì)應(yīng)的數(shù)值,處理效率高。c語言等開發(fā)語言均提供了對(duì)于整數(shù)進(jìn)行位操作的運(yùn)算符,因此當(dāng)采用軟件方式實(shí)現(xiàn)本實(shí)施方式也非常方便。
其它實(shí)施方式中,也可以只有部分維度取值為所有值時(shí)對(duì)應(yīng)的數(shù)值為0;或者,每個(gè)維度取值為所有值時(shí)對(duì)應(yīng)的數(shù)值均為1,這樣位運(yùn)算時(shí)就是對(duì)相應(yīng)的位進(jìn)行置1操作。
本實(shí)施例的一種備選方案中,所述對(duì)于待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì),分別計(jì)算每個(gè)鍵名對(duì)應(yīng)的鍵值的平均值包括:
在待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì)中,按照鍵名進(jìn)行鍵值累加以及鍵值對(duì)個(gè)數(shù)的統(tǒng)計(jì);對(duì)于每個(gè)鍵名,將該鍵名對(duì)應(yīng)的累加結(jié)果除以對(duì)應(yīng)的個(gè)數(shù),得到該鍵名對(duì)應(yīng)鍵值的平均值。
本備選方案中,如果在單機(jī)進(jìn)行運(yùn)算時(shí),可以通過一次除運(yùn)算得到平均值;如果采用mapreduce方式,則reduce階段可以將所有map階段中得到 的對(duì)應(yīng)于一個(gè)鍵名的累加結(jié)果和個(gè)數(shù)分別求和后,在用累加結(jié)果之和除以個(gè)數(shù)之和,得到該鍵名對(duì)應(yīng)鍵值的平均值。
不同數(shù)據(jù)有可能得到相同鍵名的鍵值對(duì),也就是說,同一個(gè)鍵名可能出現(xiàn)在多個(gè)鍵值對(duì)中;至少包括如下兩種情況:
一是兩條或兩條以上原始數(shù)據(jù)中維度取值組合相同,比如一條數(shù)據(jù)是“湖北省,中國聯(lián)通,wifi,android:89”,另一條數(shù)據(jù)是“湖北省,中國聯(lián)通,wifi,android:32”,那么這兩條數(shù)據(jù)本身的維度取值組合對(duì)應(yīng)的數(shù)值就是相同的,因此key相同。
二是即使原始數(shù)據(jù)本身的維度取值不同,但一或多個(gè)維度取值改為所有值的維度取值組合會(huì)出現(xiàn)相同的情況,比如一條數(shù)據(jù)是“湖北省,中國聯(lián)通,wifi,android:89”,將省這個(gè)維度的取值改為所有值后,得到的維度取值組合為“所有省,中國聯(lián)通,wifi,android”;另一條數(shù)據(jù)是“山東省,中國聯(lián)通,wifi,android:77”,將省這個(gè)維度的取值改為所有值后,得到的維度取值組合也同樣為“所有省,中國聯(lián)通,wifi,android”,因此這兩條數(shù)據(jù)將省的取值改為所有值時(shí),維度取值相同,key相同。
本備選方案的一種實(shí)施方式中,所述鍵名可以為整數(shù);所述按照鍵名進(jìn)行鍵值累加以及鍵值對(duì)個(gè)數(shù)的統(tǒng)計(jì)可以包括:
對(duì)于每個(gè)鍵值對(duì),分別以該鍵值對(duì)的鍵名為索引在二維數(shù)組中找到該鍵名對(duì)應(yīng)的累加結(jié)果和個(gè)數(shù);將所述個(gè)數(shù)加1;將鍵值對(duì)中的鍵值與所述累加結(jié)果相加,將相加的結(jié)果作為新的累加結(jié)果保存。
本實(shí)施方式中,可以預(yù)先建立以鍵名為索引的二維數(shù)組,一個(gè)鍵名在該二維數(shù)組中對(duì)應(yīng)的元素包括累加結(jié)果和個(gè)數(shù)。
本實(shí)施方式可以但不限于采用mapreduce實(shí)現(xiàn)。
下面用一個(gè)示例說明上述實(shí)施例。
本示例中,首先根據(jù)每條數(shù)據(jù)生成2m個(gè)鍵值對(duì),m為維數(shù)的個(gè)數(shù);將該條數(shù)據(jù)的指標(biāo)作為2m個(gè)鍵值對(duì)的value,將該條數(shù)據(jù)中原有的維度取值組合按照預(yù)定轉(zhuǎn)換成連接結(jié)果,對(duì)該連接結(jié)果進(jìn)行位運(yùn)算得到一或多個(gè)維度取值改為所有值時(shí)的維度取值組合對(duì)應(yīng)的連接結(jié)果。以連接結(jié)果作為key。比 如數(shù)據(jù)為“湖北省,中國聯(lián)通,wifi,android:89”,則生成16個(gè)鍵值對(duì),“89”為這16個(gè)鍵值對(duì)的value;將“湖北省,中國聯(lián)通,wifi,android”對(duì)應(yīng)的連接結(jié)果作為key,將省、運(yùn)營商、網(wǎng)絡(luò)制式、操作系統(tǒng)中一或多個(gè)維度為所有值時(shí)的維度取值組合(共有15種)各自對(duì)應(yīng)的連接結(jié)果也分別作為key。
將維度取值組合轉(zhuǎn)換成連接結(jié)果的過程為:將每個(gè)維度的取值分別轉(zhuǎn)換為預(yù)定位數(shù)的數(shù)值,然后按照預(yù)定順序,將每個(gè)維度的取值轉(zhuǎn)換得到的數(shù)值連接在一起,將連接結(jié)果看成一個(gè)整體,這個(gè)整體所表示的數(shù)值就是相應(yīng)維度取值組合對(duì)應(yīng)的數(shù)值。本示例中湖北省用1表示,所有省用0表示。中國聯(lián)通用1表示,中國移動(dòng)用2表示,所有運(yùn)營商用0表示。2g用1表示,wifi用4(二進(jìn)制形式為“100”)表示,所有網(wǎng)絡(luò)制式用0表示。android用1表示,ios用2(二進(jìn)制形式為“10”)表示,所有操作系統(tǒng)用0表示;在實(shí)際應(yīng)用中,如果存在其他維度也依此類推。
所述預(yù)定位數(shù)(二進(jìn)制形式)及預(yù)定順序如下:從右到左第1~2位對(duì)應(yīng)操作系統(tǒng),第3~5位對(duì)應(yīng)網(wǎng)絡(luò)類型,第6~8位對(duì)應(yīng)運(yùn)營商,第9~13位對(duì)應(yīng)省。
如圖4所示,比如數(shù)據(jù)為“湖北省,中國聯(lián)通,wifi,android:89”,該條數(shù)據(jù)的維度取值組合對(duì)應(yīng)的連接結(jié)果為:0000100110001,將該連接結(jié)果看成一個(gè)整體,表示整數(shù)305。
接下來針對(duì)上述數(shù)據(jù)添加維度中一或多個(gè)的取值改為所有值時(shí)維度取值組合對(duì)應(yīng)的連接結(jié)果。對(duì)于一條數(shù)據(jù),如果將每種組合形式都考慮到(相當(dāng)于每個(gè)維度各自存在兩種取值,該條數(shù)據(jù)中原先的值和所有值,比如省的取值是湖北省和所有省),則包括根據(jù)數(shù)據(jù)本身的維度取值組合對(duì)應(yīng)的連接結(jié)果在內(nèi),對(duì)于該條數(shù)據(jù)將一共可以得到2m個(gè)連接結(jié)果。本示例中維度為4個(gè),除了上面的連接結(jié)果:0000100110001以外,還可以得到15個(gè)連接結(jié)果。圖4中僅給出省的取值改為所有值,以及省和運(yùn)營商的取值改為所有值的情況。
添加時(shí),通過位運(yùn)算將取值為所有值的維度對(duì)應(yīng)的位都置為“0”;比如省為所有省時(shí),就是將從右到左的第9~13位的數(shù)值置為0,得到對(duì)應(yīng)的 連接結(jié)果:0000000110001,表示整數(shù)49;再比如省為所有省,運(yùn)營商為所有運(yùn)營商時(shí),就是將從右到左的第9~13位置為0,將從右到左的第6~8位也置為0,得到對(duì)應(yīng)的連接結(jié)果:0000000010001,表示整數(shù)17。
本示例中以34個(gè)省,4個(gè)運(yùn)營商,4個(gè)網(wǎng)絡(luò)制式,3個(gè)操作系統(tǒng)為例進(jìn)行多維交叉計(jì)算,每個(gè)維度的取值包括取值為所有值的情況在內(nèi),需要建立大小為3500的二維數(shù)組,以維度取值組合對(duì)應(yīng)的數(shù)值作為索引,即每個(gè)索引代表一種維度取值的組合。對(duì)于任何一種維度取值的組合均可直接通過高效的指針偏移來操作數(shù)組中對(duì)應(yīng)的元素。
所述二維數(shù)組中,每個(gè)索引對(duì)應(yīng)于“和”和“個(gè)數(shù)”兩個(gè)元素;其中,一個(gè)索引對(duì)應(yīng)的“和”與“個(gè)數(shù)”分別是指進(jìn)行多維交叉計(jì)算的一批原始數(shù)據(jù)及根據(jù)這些原始數(shù)據(jù)添加的一個(gè)或多個(gè)維度取值為所有值的數(shù)據(jù)中,維度取值組合所對(duì)應(yīng)的數(shù)值與該索引相同的數(shù)據(jù)中指標(biāo)的累加結(jié)果、及原始數(shù)據(jù)的總條數(shù);比如圖4所示的二維數(shù)組中,索引305對(duì)應(yīng)的和為34545,個(gè)數(shù)為23,意味著進(jìn)行多維交叉計(jì)算的數(shù)據(jù)中,有23條數(shù)據(jù)的維度取值是“湖北省,中國聯(lián)通,wifi,android”,這23條數(shù)據(jù)中指標(biāo)的總和為34545。維度取值是“湖北省,中國聯(lián)通,wifi,android”的指標(biāo)平均值可以直接通過34545除以23得到。
在實(shí)際應(yīng)用中,由于數(shù)據(jù)量太大,可以采用mapreduce的方式并行處理,由于本示例中以索引代表具體的維度取值組合建立二維數(shù)組,相當(dāng)于直接得到了map形式的統(tǒng)計(jì)數(shù)據(jù),所以能完美地與mapreduce結(jié)合。在reduce階段,只需要將map階段得到的所有二維數(shù)組遍歷一遍,將索引相同的求平均值,得到的結(jié)果就是對(duì)應(yīng)維度取值組合的多維交叉計(jì)算結(jié)果。比如圖5所示,map后得到三個(gè)二維數(shù)組:map1、map2和map3。圖5中只給出了每個(gè)二維數(shù)組索引為0(即第一行)和索引為3499(即最后一行)時(shí)的元素值。以第一行為例,在reduce階段求平均值時(shí),只需要將所有二維數(shù)組中索引為0的“和”相加,然后除以所有二維數(shù)組中索引為0的“個(gè)數(shù)”之和,將結(jié)果取整就可以得到索引為0對(duì)應(yīng)的維度取值組合的指標(biāo)平均值,即:(43454+4354+43154)/(23+233+232)=186.4;取整為186。
實(shí)施例二、一種多維交叉數(shù)據(jù)處理裝置,如圖6所示,包括:
鍵值對(duì)生成模塊21,用于對(duì)于待進(jìn)行多維交叉計(jì)算的每條數(shù)據(jù)分別進(jìn)行如下操作:對(duì)于維度取值的多種組合,按照維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系分別將每種維度取值組合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值,所述維度取值的多種組合包括:該條數(shù)據(jù)中的維度取值組合、以及一或多個(gè)維度取值改為所有值時(shí)的維度取值組合;將轉(zhuǎn)換成的數(shù)值分別作為不同鍵值對(duì)的鍵名,將該條數(shù)據(jù)的指標(biāo)作為每個(gè)鍵值對(duì)的鍵值;
計(jì)算模塊22,用于對(duì)于待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì),分別計(jì)算每個(gè)鍵名對(duì)應(yīng)的鍵值的平均值。
本實(shí)施例中,所述鍵值對(duì)生成模塊21是所述裝置中負(fù)責(zé)生成鍵值對(duì)的部分,可以是軟件、硬件或兩者的結(jié)合。
本實(shí)施例中,所述計(jì)算模塊22是所述裝置中負(fù)責(zé)計(jì)算平均值的部分,可以是軟件、硬件或兩者的結(jié)合。
本實(shí)施例的一種備選方案中,所述鍵值對(duì)生成模塊按照維度取值組合和數(shù)值之間的一一對(duì)應(yīng)關(guān)系分別將每種維度取值組合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值包括:
所述鍵值對(duì)生成模塊對(duì)于每種維度取值組合,分別進(jìn)行下述操作:
按照預(yù)定順序?qū)⒚總€(gè)維度的取值對(duì)應(yīng)的預(yù)定位數(shù)的數(shù)值連接在一起,以連接結(jié)果作為該種維度取值組合對(duì)應(yīng)的數(shù)值;其中,一個(gè)維度中,包含取值為所有值的情況在內(nèi)的每個(gè)取值與數(shù)值之間的對(duì)應(yīng)關(guān)系為一一對(duì)應(yīng)
本備選方案的一種實(shí)施方式中,全部維度中,取值為所有值時(shí)對(duì)應(yīng)的數(shù)值為0;
所述鍵值對(duì)生成模塊對(duì)于一或多個(gè)維度取值改為所有值時(shí)的維度取值組合,所述按照預(yù)定順序?qū)⒚總€(gè)維度的取值對(duì)應(yīng)的數(shù)值連接在一起包括:
所述鍵值對(duì)生成模塊在根據(jù)數(shù)據(jù)中的維度取值組合得到的連接結(jié)果中,對(duì)取值改為所有值的維度對(duì)應(yīng)的位進(jìn)行置0操作。
本實(shí)施例的一種備選方案中,所述計(jì)算模塊對(duì)于待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì),分別計(jì)算每個(gè)鍵名對(duì)應(yīng)的鍵值的平均值可以包括:
所述計(jì)算模塊在待進(jìn)行多維交叉計(jì)算的數(shù)據(jù)所生成的鍵值對(duì)中,按照鍵 名進(jìn)行鍵值累加以及鍵值對(duì)個(gè)數(shù)的統(tǒng)計(jì);對(duì)于每個(gè)鍵名,將該鍵名對(duì)應(yīng)的累加結(jié)果除以對(duì)應(yīng)的個(gè)數(shù),得到該鍵名對(duì)應(yīng)鍵值的平均值。
本備選方案的一種實(shí)施方式中,所述鍵名可以為整數(shù);
所述計(jì)算模塊按照鍵名進(jìn)行鍵值累加以及鍵值對(duì)個(gè)數(shù)的統(tǒng)計(jì)可以包括:
所述計(jì)算模塊對(duì)于每個(gè)鍵值對(duì),分別以該鍵值對(duì)的鍵名為索引在二維數(shù)組中找到該鍵名對(duì)應(yīng)的累加結(jié)果和個(gè)數(shù);將所述個(gè)數(shù)加1;將鍵值對(duì)中的鍵值與所述累加結(jié)果相加,將相加的結(jié)果作為新的累加結(jié)果保存。
其它細(xì)節(jié)可參見實(shí)施例一。
本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如只讀存儲(chǔ)器、磁盤或光盤等。可選地,上述實(shí)施例的全部或部分步驟也可以使用一個(gè)或多個(gè)集成電路來實(shí)現(xiàn)。相應(yīng)地,上述實(shí)施例中的各模塊/單元可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。本申請(qǐng)不限制于任何特定形式的硬件和軟件的結(jié)合。
當(dāng)然,本申請(qǐng)還可有其他多種實(shí)施例,在不背離本申請(qǐng)精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本申請(qǐng)作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本申請(qǐng)的權(quán)利要求的保護(hù)范圍。