我正在处理一个项目,我正在处理很多推文; 我的目标是在处理它们时删除重复项.我有推文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) 我试图根据我的变量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) 我有一个对象数组.我想根据对象中的"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重复数组问题,但似乎没有一个处理对象和过滤一个参数.
我试图从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']
如何修复我的功能来做我想要的?
谢谢.
IE无法处理超过4096个css规则.这个限制让我感到困惑.所以我正在寻找一种可以识别重复css规则并合并它们的工具.如果结果大小更重要,那就是减少css规则.
这不是css压缩器问题,而是css规则数减少问题.
我们试图避免保存重复的文件.但是,我们的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
我阅读了所有相关的重复问题/答案,我发现这是最相关的答案:
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(包括重复行)
我有一张桌子:
| 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)
什么是最有效的 …
我从这个链接有这个代码:如何删除重复的行?
;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它删除随机重复.
如果不可能,我怎样才能删除更高时间的重复项?
假设我在一个 Excel 单元格中有以下文本字符串:
John John John Mary Mary
Run Code Online (Sandbox Code Playgroud)
我想在另一个单元格上创建一个公式(所以没有菜单功能或 VBA,请)
John Mary
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
到目前为止我尝试过的是在互联网上搜索有关该问题的内容,我所能找到的只是涉及 Excel 的内置重复删除或涉及countif 和替换"". 我还查看了 Excel 函数列表,尤其是“文本”类别中的函数列表,但找不到任何可以在一个单元格上完成的有趣内容。
java ×2
mysql ×2
sql ×2
blobstore ×1
cell ×1
css ×1
delete-row ×1
duplicates ×1
excel ×1
hashset ×1
indexing ×1
list ×1
md5 ×1
object ×1
optimization ×1
php ×1
python ×1
r ×1
sql-server ×1