国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)/技術(shù)文章
文章詳情頁(yè)

python - mongodb 去重

瀏覽:78日期:2022-08-05 17:07:12

問(wèn)題描述

爬取了一個(gè)用戶的論壇數(shù)據(jù),但是這個(gè)數(shù)據(jù)庫(kù)中有重復(fù)的數(shù)據(jù),于是我想把重復(fù)的數(shù)據(jù)項(xiàng)給去掉。數(shù)據(jù)庫(kù)的結(jié)構(gòu)如下python - mongodb 去重

里邊的forundata是這個(gè)帖子的每個(gè)樓層的發(fā)言情況。但是因?yàn)樘优廊〉臅r(shí)候有可能重復(fù)爬取了,我現(xiàn)在想根據(jù)里邊的urlId來(lái)去掉重復(fù)的帖子,但是在去除的時(shí)候我想保留帖子的forumdata(是list類型)字段中列表長(zhǎng)度最長(zhǎng)的那個(gè)。用mongodb的distinct方法只能返回重復(fù)了的帖子urlId,都不返回重復(fù)帖子的其他信息,我沒(méi)法定位。。。假如重復(fù)50000個(gè),那么我還要根據(jù)這些返回的urlId去數(shù)據(jù)庫(kù)中find之后再在mongodb外邊代碼修改嗎?可是即使這樣,我發(fā)現(xiàn)運(yùn)行的時(shí)候速度特別慢。之后我用了group函數(shù),但是在reduce函數(shù)中,因?yàn)槲乙容^forumdata函數(shù)的大小,然后決定保留哪一個(gè)forumdata,所以我要傳入forumdata,但是有些forumdata大小超過(guò)了16M,導(dǎo)致報(bào)錯(cuò),然后這樣有什么解決辦法嗎?或者用第三種方法,用Map_reduce,但是我在map-reduce中的reduce傳入的forumdata大小限制竟然是8M,還是報(bào)錯(cuò)。。。

代碼如下group的代碼:

reducefunc=Code( ’function(doc,prev){’ ’if (prev==null){’ ’prev=doc’ ’}’ ’if(prev!=null){’ ’if (doc.forumdata.lenth>prev.forumdata.lenth){’ ’prev=doc’ ’}’ ’}’ ’}’)

map_reduce的代碼:

reducefunc=Code( ’function(urlId,forumdata){’ ’if(forumdata.lenth=1){’ ’return forumdata[0];’ ’}’ ’else if(forumdata[0].lenth>forumdata[1].lenth){’ ’return forumdata[0];’ ’}’ ’else{’ ’return forumdata[1]}’ ’}’)mapfunc=Code( ’function(){’ ’emit(this.urlId,this.forumdata)’ ’}’)

望各位高手幫我看看這個(gè)問(wèn)題該怎么解決,三個(gè)方案中隨便各一個(gè)就好,或者重新幫我分析一個(gè)思路,感激不盡。鄙人新人,問(wèn)題有描述不到位的地方請(qǐng)?zhí)岢鰜?lái),我會(huì)立即補(bǔ)充完善。

問(wèn)題解答

回答1:

如果這個(gè)問(wèn)題還沒(méi)有解決,不妨參考下面的想法:

1、MongoDB中推薦使用aggregation,而不推薦使用map-reduce;

2、您的需求中,很重要的一點(diǎn)是獲取Forumdata的長(zhǎng)度:數(shù)組的長(zhǎng)度,從而找到數(shù)組長(zhǎng)度最長(zhǎng)的document。您原文說(shuō)Forumdata是列表(在MongoDB中應(yīng)該是數(shù)組);MongoDB提供了$size運(yùn)算符號(hào)取得數(shù)組的大小。

請(qǐng)參考下面的栗子:

> db.data.aggregate([ {$project : { '_id' : 1, 'name' : 1, 'num' : 1, 'length' : { $size : '$num'}}}]){ '_id' : ObjectId('58e631a5f21e5d618900ec20'), 'name' : 'a', 'num' : [ 12, 123, 22, 34, 1 ], 'length' : 5 }{ '_id' : ObjectId('58e631a5f21e5d618900ec21'), 'name' : 'b', 'num' : [ 42, 22 ], 'length' : 2 }{ '_id' : ObjectId('58e631a7f21e5d618900ec22'), 'name' : 'c', 'num' : [ 49 ], 'length' : 1 }

3、有了上面的數(shù)據(jù)后,然后可以利用aggregation中的$sort,$group等找到滿足您的需求的Document的objectId,具體做法可以參考下面的帖子:

https://segmentfault.com/q/10...

4、最后批量刪除相關(guān)的ObjectId

類似于:var dupls = [] 保存要?jiǎng)h除的objectIddb.collectionName.remove({_id:{$in:dupls}})

供參考。

Love MongoDB! Have Fun!

戳我<--請(qǐng)戳左邊,就在四月!MongoDB中文社區(qū)深圳用戶大會(huì)開(kāi)始報(bào)名啦!大神云集!

回答2:

數(shù)據(jù)量的規(guī)模不是很大的話可以考慮重新爬取一次,每次存的時(shí)候查詢一下,只存數(shù)據(jù)最多的一組數(shù)據(jù)。優(yōu)秀的爬蟲(chóng)策略>>優(yōu)秀的數(shù)據(jù)清洗策略

回答3:

感謝各位網(wǎng)友,在qq群中,有人給出了思路,是在map的是先以u(píng)rlId對(duì)forumdata進(jìn)行處理,返回urlId和forumdatad.length,之后再在reduce中處理,保留forumdata.length最大的那個(gè)和對(duì)應(yīng)的urlId,最后保存成一個(gè)數(shù)據(jù)庫(kù),之后通過(guò)這個(gè)數(shù)據(jù)庫(kù)中的urlId來(lái)從原數(shù)據(jù)庫(kù)中將所有數(shù)據(jù)讀取出來(lái)。我試過(guò)了,雖然效率不是我期望的那種,不過(guò)速度還是比以前用python處理快了不少。附上map和reduce的代碼:’’’javaScriptmapfunc=Code(

’function(){’’data=new Array();’’data={lenth:this.forumdata.length,’’id:this._id};’# ’data=this._id;’’emit({'id':this.urlId},data);’’}’)

reducefunc=Code(

’function(tieziID,dataset){’’reduceid=null;’’reducelenth=0;’’’’’’redecenum1=0;’’redecenum2=0;’’’’dataset.forEach(function(val){’’if(reducelenth<=val['lenth']){’’reducelenth=val['lenth'];’’reduceid=val['id'];’’redecenum1+=1;’’}’’redecenum2+=1;’’});’’return {'lenth':reducelenth,'id':reduceid};’’}’ )

上邊是先導(dǎo)出一個(gè)新的數(shù)據(jù)庫(kù)的代碼,下邊是處理這個(gè)數(shù)據(jù)庫(kù)的代碼:

mapfunc=Code(

’function(){’# ’data=new Array();’’lenth=this.forumdata.length;’’’’emit(this.urlId,lenth);’’}’

)

reducefunc=Code(

’function(key,value){’’return value;’’}’

)

之后添加到相應(yīng)的map_reduce中就行了。感覺(jué)Bgou回答的不錯(cuò),所以就選他的答案了,還沒(méi)有去實(shí)踐。上邊是我的做法,就當(dāng)以后給遇到同樣問(wèn)題的人有一個(gè)參考。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 亚洲国产精品区 | 亚洲精品国产美女在线观看 | 亚洲一区二区免费看 | 美女被强行扒开双腿激情视频 | 欧美成人精品手机在线观看 | 国产欧美在线观看视频 | 女人夜色黄网在线观看 | 日本性色| 久草免费新视频 | 一区毛片 | 乱子伦农村xxxx视频 | 欧美精品成人一区二区在线观看 | 日日噜噜噜夜夜爽爽狠狠69 | 沈樵在线观看福利 | 一级片视频免费看 | 日韩特级黄色片 | 亚洲欧洲日韩综合色天使不卡 | 尹人在线视频 | 美女张开腿让我桶 | 国产欧美精品一区二区 | 成人免费午夜性视频 | 欧美一级视频免费观看 | 成人黄色在线免费观看 | 性a爱片免费视频性 | 亚洲情a成黄在线观看 | 国产精品免费一区二区三区四区 | 免看一级a毛片一片成人不卡 | 成人在线视频免费 | 国产精品久久久免费视频 | 欧洲一级鲁丝片免费 | 国内精品国语自产拍在线观看55 | 亚洲综合一区二区不卡 | 一级毛片免费不卡在线 | 久草一级片 | 国产高清晰在线播放 | 日韩欧美视频一区二区三区 | 目韩一区二区三区系列片丶 | 成人夜色香网站在线观看 | 杨幂丝袜国产福利视频 | 久久精品国产6699国产精 | 国产精品亚洲欧美日韩区 |