溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive實現數據抽樣的方法有哪些

發布時間:2021-07-28 09:12:43 來源:億速云 閱讀:533 作者:chen 欄目:大數據

這篇文章主要講解了“Hive實現數據抽樣的方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Hive實現數據抽樣的方法有哪些”吧!

在大規模數據量的數據分析及建模任務中,往往針對全量數據進行挖掘分析時會十分耗時和占用集群資源,因此一般情況下只需要抽取一小部分數據進行分析及建模操作。Hive提供了數據取樣(SAMPLING)的功能,能夠根據一定的規則進行數據抽樣,目前支持數據塊抽樣,分桶抽樣和隨機抽樣,具體如下所示:

1. 數據塊抽樣(tablesample()函數)
1) tablesample(n percent)  根據hive表數據的大小按比例抽取數據,并保存到新的hive表中。如:抽取原hive表中10%的數據
(注意:測試過程中發現,select語句不能帶where條件且不支持子查詢,可通過新建中間表或使用隨機抽樣解決)

create table xxx_new as select * from xxx tablesample(10 percent)

2)tablesample(n M)  指定抽樣數據的大小,單位為M。
3)tablesample(n rows)  指定抽樣數據的行數,其中n代表每個map任務均取n行數據,map數量可通過hive表的簡單查詢語句確認(關鍵詞:number of mappers: x)

2.分桶抽樣
hive中分桶其實就是根據某一個字段Hash取模,放入指定數據的桶中,比如將表table_1按照ID分成100個桶,其算法是hash(id) % 100,這樣,hash(id) % 100 = 0的數據被放到第一個桶中,hash(id) % 100 = 1的記錄被放到第二個桶中。創建分桶表的關鍵語句為:CLUSTER BY語句。
分桶抽樣語法:

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

其中x是要抽樣的桶編號,桶編號從1開始,colname表示抽樣的列,y表示桶的數量。
例如:將表隨機分成10組,抽取其中的第一個桶的數據

select * from table_01 tablesample(bucket 1 out of 10 on rand())

3. 隨機抽樣(rand()函數)

1)使用rand()函數進行隨機抽樣,limit關鍵字限制抽樣返回的數據,其中rand函數前的distribute和sort關鍵字可以保證數據在mapper和reducer階段是隨機分布的,案例如下:

select * from table_name where col=xxx distribute by rand() sort by rand() limit num;

2)使用order 關鍵詞

案例如下:

select * from table_name where col=xxx order by rand() limit num;

經測試對比,千萬級數據中進行隨機抽樣 order by方式耗時更長,大約多30秒左右。

感謝各位的閱讀,以上就是“Hive實現數據抽樣的方法有哪些”的內容了,經過本文的學習后,相信大家對Hive實現數據抽樣的方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女