日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop分布式环境下的数据抽样

發布時間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop分布式环境下的数据抽样 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://dongxicheng.org/data-mining/hadoop-sampling/

1. 問題由來

Google曾經有一道非常經典的面試題:

給你一個長度為N的鏈表。N很大,但你不知道N有多大。你的任務是從這N個元素中隨機取出k個元素。你只能遍歷這個鏈表一次。你的算法必須保證取出的元素恰好有k個,且它們是完全隨機的(出現概率均等)?

這道題的解法非常多,網上討論也非常熱烈。本文要討論的是,這個問題是從何而來,有什么實用價值?

自從有了Hadoop之后,該問題便有了新的應用載體。隨著數據量的增多,很多數據挖掘算法被轉移到MapReduce上實現,而數據挖掘中有個基本的問題是怎樣對數據進行抽樣。在Hadoop中,每個job會被分解成多個task并行計算,而數據的總量事先是不知道的(知道job運行結束才能獲取數總數,而數據量非常大時,掃描一遍數據的代價非常高),用戶知道的只是要獲取的樣本量,那怎樣在類似于Hadoop的分布式平臺上進行數據抽樣?

回過頭來看google的這道面試題,是不是正好時Hadoop平臺上海量數據抽樣問題?

2. 在Hadoop上編寫抽樣程序

2.1 解法一

(1) 設計思想

蓄水池抽樣:先保存前k個元素, 從第k+1個元素開始, 以1/i (i=k+1, k+2,…,N) 的概率選中第i個元素,并隨機替換掉一個已保存的記錄,這樣遍歷一次得到k個元素,可以保證完全隨機選取。

(2) MapReduce實現

要實現該抽樣算法,只需編寫Mapper即可。在Map函數中,用戶定義一個vector保存選中的k個元素,待掃描完所有元素后,在析構函數中將vector中的數據寫到磁盤中。

用戶運行job時,需指定每個map task的采樣量。比如,用戶該job的map task個數為s,則每個map task需要采集k/s個元素。


總結

以上是生活随笔為你收集整理的Hadoop分布式环境下的数据抽样的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。