标签: duplicate-removal

Java:优化hashset以进行大规模重复检测

我正在处理一个项目,我正在处理很多推文; 我的目标是在处理它们时删除重复项.我有推文ID,它以格式的字符串形式出现"166471306949304320"

我一直在使用HashSet<String>这个,它可以正常工作一段时间.但到了大约1000万件物品的时候,我却陷入了巨大的困境,并最终得到了一个GC错误,大概是从重新开始.我试着定义一个更好的尺寸/负载

tweetids = new HashSet<String>(220000,0.80F);

这让它变得更远,但仍然非常缓慢(大约1000万,它需要花费3倍的时间来处理).我该如何优化呢?鉴于我已经大致知道在结尾集合中应该有多少项目(在这种情况下,大约20-2200万)我应该创建一个只重复两次或三次的HashSet,或者这样的开销是多少?设置了太多的时间罚款?如果我没有使用String,或者我定义了一个不同的HashCode函数(在这种情况下是String的特定实例,我不知道该怎么做),事情会更好吗?这部分实现代码如下.

tweetids = new HashSet<String>(220000,0.80F); // in constructor
duplicates = 0;
...
// In loop: For(each tweet)
String twid = (String) tweet_twitter_data.get("id");
// Check that we have not processed this tweet already
if (!(tweetids.add(twid))){
    duplicates++;
    continue; 
}
Run Code Online (Sandbox Code Playgroud)

感谢您的推荐,我解决了这个问题.问题是哈希表示所需的内存量; 首先,它HashSet<String>是巨大的,不必要的,因为String.hashCode()这种规模过高.接下来,我尝试了一个Trie,但它在100多万个条目中崩溃了; 重新分配阵列是有问题的.我使用了HashSet<Long>更好的效果并且几乎成功了,但是速度衰减了,它最终在处理的最后一段(大约1900万)崩溃了.解决方案来自标准库并使用Trove.它完成了2200万条记录,比不检查重复条件快几分钟.最终的实现很简单,看起来像这样:

import gnu.trove.set.hash.TLongHashSet;
...
    TLongHashSet tweetids; // class variable
... 
    tweetids = new TLongHashSet(23000000,0.80F); // in constructor
...
    // inside for(each record) …
Run Code Online (Sandbox Code Playgroud)

java optimization hashset duplicate-removal

11
推荐指数
1
解决办法
3877
查看次数

根据规则集删除重复的观察

我试图根据我的变量id从数据集中删除重复的观察结果.但是,我希望删除观察结果基于以下规则.下面的变量是id,户主的性别(男性,男性,女性)和户主的年龄.规则如下.如果一个家庭有男性和女性家庭户主,则取消女性户主观察.如果一个家庭为两个男性或两个女性头部,请用年轻的家庭头部取消观察.下面是一个示例数据集.

id = c(1,2,2,3,4,5,5,6,7,8,8,9,10)
sex = c(1,1,2,1,2,2,2,1,1,1,1,2,1)
age = c(32,34,54,23,32,56,67,45,51,43,35,80,45)
data = data.frame(cbind(id,sex,age))
Run Code Online (Sandbox Code Playgroud)

r duplicate-removal

10
推荐指数
2
解决办法
7343
查看次数

根据对象属性从数组中删除重复项?

我有一个对象数组.我想根据对象中的"name"值删除重复项.

  [0]=>
  object(stdClass)#337 (9) {
    ["term_id"]=>
    string(2) "23"
    ["name"]=>
    string(12) "Assasination"
    ["slug"]=>
    string(12) "assasination"
  }
  [1]=>
  object(stdClass)#44 (9) {
    ["term_id"]=>
    string(2) "14"
    ["name"]=>
    string(16) "Campaign Finance"
    ["slug"]=>
    string(16) "campaign-finance"
  }
  [2]=>
  object(stdClass)#298 (9) {
    ["term_id"]=>
    string(2) "15"
    ["name"]=>
    string(16) "Campaign Finance"
    ["slug"]=>
    string(49) "campaign-finance-good-government-political-reform"
  }
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,如何从阵列中删除重复的"Campaign Finance"对象.整个[2]对象呢?

我在这里经历了一堆PHP重复数组问题,但似乎没有一个处理对象和过滤一个参数.

php object duplicate-removal multidimensional-array

9
推荐指数
2
解决办法
7066
查看次数

python从2个列表中删除重复项

我试图从2个列表中删除重复项.所以我写了这个函数:

a = ["abc", "def", "ijk", "lmn", "opq", "rst", "xyz"]

b = ["ijk", "lmn", "opq", "rst", "123", "456", ]

for i in b:
    if i in a:
        print "found " + i
        b.remove(i)

print b
Run Code Online (Sandbox Code Playgroud)

但我发现匹配项后面的匹配项不会被删除.

我得到这样的结果:

found ijk
found opq
['lmn', 'rst', '123', '456']
Run Code Online (Sandbox Code Playgroud)

但我希望结果如下:

['123','456']

如何修复我的功能来做我想要的?

谢谢.

python list duplicate-removal

9
推荐指数
4
解决办法
2万
查看次数

基于java的工具减少了css规则的数量

IE无法处理超过4096个css规则.这个限制让我感到困惑.所以我正在寻找一种可以识别重复css规则并合并它们的工具.如果结果大小更重要,那就是减少css规则.

这不是css压缩器问题,而是css规则数减少问题.

css java duplicate-removal

8
推荐指数
1
解决办法
506
查看次数

如何为com.google.appengine.api.blobstore.BlobInfo计算md5Hash

我们试图避免保存重复的文件.但是,我们的md5结果总是与BlobInfo不同.

我们如何计算它:

    MessageDigest messageDigest = java.security.MessageDigest.getInstance("MD5");
    digest = messageDigest.digest(bytes);
    String digestString = DigestUtils.md5Hex(digest);
Run Code Online (Sandbox Code Playgroud)

它不符合: (new BlobInfoFactory().loadBlobInfo(blobKey)).getMd5Hash();

示例不匹配:

google vs my own calculation:
8cdeb6db94bc4fd156e2975fd8ebbcf2 vs 9003b37afbf3637de96c35774069453f 
65a25dafcba58d16d58a9c7585cc3932 vs 52383159f7d27417d50121aaee2728b5 
5cccc2d690fdc0c254234d5526876b34 vs 8196da9b6733daa60e08d927693df483 
Run Code Online (Sandbox Code Playgroud)

它在生产服务器上.(我们没有测试开发环境)

google-app-engine md5 duplicate-removal message-digest blobstore

8
推荐指数
1
解决办法
833
查看次数

按两列查找并删除重复的行

我阅读了所有相关的重复问题/答案,我发现这是最相关的答案:

INSERT IGNORE INTO temp(MAILING_ID,REPORT_ID) 
SELECT DISTINCT MAILING_ID,REPORT_IDFROM table_1
;
Run Code Online (Sandbox Code Playgroud)

问题是我想通过col1和col2删除重复项,但也想要插入table_1的所有其他字段.

我尝试以这种方式添加所有相关列:

INSERT IGNORE INTO temp(M_ID,MAILING_ID,REPORT_ID,
MAILING_NAME,VISIBILITY,EXPORTED) SELECT DISTINCT  
M_ID,MAILING_ID,REPORT_ID,MAILING_NAME,VISIBILITY,
EXPORTED FROM table_1
;


M_ID(int,primary),MAILING_ID(int),REPORT_ID(int),
MAILING_NAME(varchar),VISIBILITY(varchar),EXPORTED(int)
Run Code Online (Sandbox Code Playgroud)

但它将所有行插入temp(包括重复行)

mysql sql indexing duplicate-removal

8
推荐指数
4
解决办法
2万
查看次数

从表中删除所有重复行的最有效方法是什么?

我有一张桌子:

| foo | bar |
+-----+-----+
| a   | abc |
| b   | def |
| c   | ghi |
| d   | jkl |
| a   | mno |
| e   | pqr |
| c   | stu |
| f   | vwx |
Run Code Online (Sandbox Code Playgroud)

我想按列删除包含重复项的所有行,foo以便表格看起来像这样:

| foo | bar |
+-----+-----+
| b   | def |
| d   | jkl |
| e   | pqr |
| f   | vwx |
Run Code Online (Sandbox Code Playgroud)

什么是最有效的 …

mysql duplicate-removal delete-row

8
推荐指数
2
解决办法
1406
查看次数

SQL - 如何按上次输入的值删除重复的行?

我从这个链接有这个代码:如何删除重复的行?

 ;WITH cte
 AS (SELECT ROW_NUMBER() OVER (PARTITION BY person_id, date_work, hours
                                   ORDER BY ( SELECT 0)) RN
     FROM   work_hours)
 DELETE FROM cte
 WHERE  RN > 1
Run Code Online (Sandbox Code Playgroud)

是否可以删除第一个输入的重复行或我应该有一个额外的列date_of_entry?我想这样做,如果我输入相同的date_work和不同的小时,PARTITION BY person_id, date_work它删除随机重复.

如果不可能,我怎样才能删除更高时间的重复项?

sql sql-server duplicate-removal

7
推荐指数
1
解决办法
1573
查看次数

删除 Excel 单元格中的重复项

假设我在一个 Excel 单元格中有以下文本字符串:

John John John Mary Mary
Run Code Online (Sandbox Code Playgroud)

我想在另一个单元格上创建一个公式(所以没有菜单功能或 VBA,请)

John Mary
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

到目前为止我尝试过的是在互联网上搜索有关该问题的内容,我所能找到的只是涉及 Excel 的内置重复删除或涉及countif 和替换"". 我还查看了 Excel 函数列表,尤其是“文本”类别中的函数列表,但找不到任何可以在一个单元格上完成的有趣内容。

excel cell duplicates excel-formula duplicate-removal

7
推荐指数
2
解决办法
4万
查看次数