中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

這篇文章主要介紹“Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解”,在日常操作中,相信很多人在Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

10年的博野網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整博野建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“博野網(wǎng)站設(shè)計(jì)”,“博野網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

抽樣

抽樣在Hive 中也是比較常用的一種手段,主要用在下面的幾個(gè)場(chǎng)景中

  1. 一些機(jī)器學(xué)習(xí)的場(chǎng)景中,數(shù)倉(cāng)作為數(shù)據(jù)的提供方提供樣本數(shù)據(jù)

  2. 數(shù)據(jù)的計(jì)算結(jié)果異?;蛘呤侵笜?biāo)異常,這個(gè)時(shí)候如果我們往往需要確認(rèn)數(shù)據(jù)源的數(shù)據(jù)是否本身就有異常

  3. SQL的性能有問(wèn)題的時(shí)候我們也會(huì)使用抽樣的方法區(qū)查看數(shù)據(jù),然后進(jìn)行SQL調(diào)優(yōu)

  4. 在大規(guī)模數(shù)據(jù)量的數(shù)據(jù)分析及建模任務(wù)中,往往針對(duì)全量數(shù)據(jù)進(jìn)行挖掘分析時(shí)會(huì)十分耗時(shí)和占用集群資源,因此一般情況下只需要抽取一小部分?jǐn)?shù)據(jù)進(jìn)行分析及建模操作。

隨機(jī)抽樣(rand()函數(shù))

我們一般情況下是使用排序函數(shù)和rand() 函數(shù)來(lái)完成隨機(jī)抽樣,limit關(guān)鍵字限制抽樣返回的數(shù)據(jù),不同之處再有我們使用哪個(gè)排序函數(shù)呢

利用 rand() 函數(shù)進(jìn)行抽取,這是因?yàn)閞and() 返回一個(gè)0到1之間double 類(lèi)型的隨機(jī)值。

下面我們用到了前面我們使用過(guò)的一張表大概4603089 條記錄,這里我就不給大家準(zhǔn)備數(shù)據(jù)了,大家可以看Hive進(jìn)階之?dāng)?shù)據(jù)存儲(chǔ)格式來(lái)獲取測(cè)試數(shù)據(jù)

create table ods_user_bucket_log(      id int,      name string,      city string,      phone string,      acctime string) CLUSTERED BY (`id` ) INTO 5 BUCKETS  row format delimited fields terminated by '\t' stored as textfile; insert overwrite table ods_user_bucket_log select * from ods_user_log;

order by rand()

order by只會(huì)啟用一個(gè)reduce所以比較耗時(shí),至于為什么我們?cè)谇懊娴奈恼轮薪忉屵^(guò)了Hive語(yǔ)法之常見(jiàn)排序方式

因?yàn)閛rder by 是全局的,所以可以做到隨機(jī)抽樣的目的

select * from ods_user_bucket_log order by rand() limit 10;

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

sort by rand()

sort by 提供了單個(gè) reducer  內(nèi)的排序功能,但不保證整體有序,這個(gè)時(shí)候其實(shí)不能做到真正的隨機(jī)的,因?yàn)榇藭r(shí)的隨機(jī)是針對(duì)分區(qū)去的,所以如果我們可以通過(guò)控制進(jìn)入每個(gè)分區(qū)的數(shù)據(jù)也是隨機(jī)的話(huà),那我們就可以做到隨機(jī)了

select * from ods_user_bucket_log sort by rand() limit 10;

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

distribute by rand() sort by rand()

rand函數(shù)前的distribute和sort關(guān)鍵字可以保證數(shù)據(jù)在mapper和reducer階段是隨機(jī)分布的,這個(gè)時(shí)候我們也能做到真正的隨機(jī),前面我們也介紹過(guò)cluster  by 其實(shí)基本上是和distribute by sort by 等價(jià)的

select * from ods_user_bucket_log distribute by rand() sort by rand() limit 10;

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

cluster by rand()

cluster by 的功能是 distribute by 和 sort by 的功能相結(jié)合,distribute by rand() sort by  rand() 進(jìn)行了兩次隨機(jī),cluster by rand() 僅一次隨機(jī),所以速度上會(huì)比上一種方法快

select * from ods_user_bucket_log cluster by rand() limit 10;

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

tablesample()抽樣函數(shù)

分桶抽樣(桶表抽樣)

hive中分桶其實(shí)就是根據(jù)某一個(gè)字段Hash取模,放入指定數(shù)據(jù)的桶中,比如將表table按照ID分成100個(gè)桶,其算法是hash(id) %  100,這樣,hash(id) % 100 = 0的數(shù)據(jù)被放到第一個(gè)桶中,hash(id) % 100 = 1的記錄被放到第二個(gè)桶中。

分桶抽樣語(yǔ)法:

TABLESAMPLE (BUCKET x OUT OF y [ON colname])

其中x是要抽樣的桶編號(hào),桶編號(hào)從1開(kāi)始,colname表示抽樣的列(也就是按照那個(gè)字段分桶),y表示桶的數(shù)量。所以表達(dá)的意思是按照colname字段分成y桶,抽取其中的第x桶

SELECT     * FROM     ods_user_bucket_log TABLESAMPLE (BUCKET 1 OUT OF 100000 ON rand()) ;

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

數(shù)據(jù)塊抽樣

從 Hive 0.8 開(kāi)始提供塊抽樣,使用 tablesample 抽取指定的 行數(shù)/比例/大小

SELECT * FROM ods_user_data TABLESAMPLE(1000 ROWS); SELECT * FROM ods_user_data TABLESAMPLE (20 PERCENT);  SELECT * FROM ods_user_data TABLESAMPLE(1M);

按比例抽樣 ABLESAMPLE (20 PERCENT)

這將允許 Hive 至少獲取 n%的數(shù)據(jù)

SELECT     * FROM     ods_user_bucket_log TABLESAMPLE(0.0001 PERCENT);

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

抽取特定大小的數(shù)據(jù)TABLESAMPLE(100M)

SELECT     * FROM     ods_user_bucket_log TABLESAMPLE(1M);

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

需要注意的是這里必須是整數(shù)M ,以為我嘗試零點(diǎn)幾的時(shí)候報(bào)錯(cuò)了

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

抽取特定的行數(shù) TABLESAMPLE(10 ROWS)

SELECT     * FROM     ods_user_bucket_log TABLESAMPLE(10 rows);

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

擴(kuò)展

隨機(jī)抽樣如何實(shí)現(xiàn)按比例抽樣

前面我們介紹了TABLESAMPLE 可以實(shí)現(xiàn)按比例抽樣,隨機(jī)抽樣可以借助limit  可以實(shí)現(xiàn)抽取特定記錄數(shù),其實(shí)我們?nèi)绻麑?duì)隨機(jī)抽樣進(jìn)行改進(jìn)也可以實(shí)現(xiàn)按照比例抽樣,因?yàn)閞and()  的函數(shù)值是隨機(jī)的,所以我們可以對(duì)其返回值做條件過(guò)濾從而實(shí)現(xiàn)按照比例的抽樣

select     * from(     select         * ,rand() as radix     from         ods_user_bucket_log ) tmp where     radix>=0.0     and radix<=0.0001 ;

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

分層抽樣(分組抽樣)

分層抽樣,這里可以分為兩種,一種是分層抽個(gè)數(shù)另外一種是分層抽比例

分層抽個(gè)數(shù)

select     * from (     select         id,ctime,         row_number() over(partition by id order by rand() ) as rn     from         ods_user_log ) tmp where rn<=3 ;

Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解

分層按比例的抽樣,也可以按照上面的方式實(shí)現(xiàn)

總結(jié)

  1. TABLESAMPLE 抽樣函數(shù)本身是不走M(jìn)R 的所以執(zhí)行速度很快(注意抽取多少M(fèi)的時(shí)候,只能是整數(shù)M)

  2. 隨機(jī)抽樣函數(shù)需要走M(jìn)R的,所以執(zhí)行性能上沒(méi)有TABLESAMPLE那么快,而且表達(dá)能力有限,只能獲取特定的條數(shù)(limit n)

  3. 借助row_number實(shí)現(xiàn)分層抽樣

到此,關(guān)于“Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

當(dāng)前標(biāo)題:Hive抽樣的相關(guān)知識(shí)點(diǎn)詳解
文章分享:http://www.rwnh.cn/article4/jipioe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)手機(jī)網(wǎng)站建設(shè)、建站公司、品牌網(wǎng)站制作、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)
汉寿县| 彭山县| 河东区| 清丰县| 泾源县| 杭锦旗| 息烽县| 讷河市| 武强县| 通江县| 成武县| 延安市| 登封市| 温宿县| 旺苍县| 防城港市| 仙居县| 边坝县| 阜阳市| 高安市| 临泉县| 资兴市| 西充县| 麻阳| 宜州市| 兴安县| 邮箱| 甘谷县| 沙雅县| 澄迈县| 宿松县| 灌南县| 黄山市| 交口县| 兴业县| 博罗县| 东兴市| 廊坊市| 万全县| 龙口市| 霍邱县|