我对Java非常陌生,所以如果我做了一些非常错误的事情,请原谅我。
我在一个项目中工作,我需要快速扫描大量的数据(CSV有5000万行或更多,每行5个条目)重复。我使用了hashmap
,因为它的.contains()
方法速度很快。
您在这里有很多选择,我将列出其中的一些:
>
-xmx
编译器标志-例如Dimitry建议的-xmx3g
将给您提供3GB的堆,而默认值为<=1GB.存储更少的数据:您当前存储的是“1到100个条目”的整行,而实际上我们所需要的只是知道数据是否唯一。arrays.hashcode()
函数为您提供了一个相当准确的指示,表明一行在单个int
中是唯一的,因此我们可以使用它来限制内存中需要保存的数据量:
>
构造两个hashset
对象,称为seen
和seentwice
。循环您的数据,并将每个数组的哈希添加到seen
,如果它已经在seen
中,则添加到seentwice
,如下所示:
int[] arr = ... // construct the row's array
int hash = Arrays.hashCode(arr);
if(!seen.add(hash)) {
// add returns false if we've already seen this hash
seenTwice.add(hash);
}
现在我们有一组散列,我们看到了两次或更多次;理论上,这将是一个比我们文件中的行数小得多的集合。我们可以让seened
收集垃圾,并使用seentwice
重新读取文件,以填充实际数据的hashset
,就像您第一次尝试做的那样:
int[] arr = ... // construct the row's array
int hash = Arrays.hashCode(arr);
if(seenTwice.contains(hash)) {
// If the hash isn't in seenTwice, we know it's not a duplicate
if(!rows.add(arr)) {
System.out.println("Row "+Arrays.toString(arr))+" is a duplicate!");
}
}
使用bash:如果您愿意放弃Java,您可以通过一个基本的bash命令非常容易地找到副本:
cat filename | sort | uniq -d
使用数据库:您可以使用一些内存不足的解决方案,特别是数据库。H2是一个好的、易于使用的Java数据库,但是使用它超出了本答案的范围。可以说,您可以将数据从文件加载到数据库中,然后简单地查询重复的行:在SQL表中查找重复的值
另请参见:在csv文件中查找重复项的脚本
我有以下代码: 我要做的是检查文件是否在当前目录中。如果找不到,则创建该文件。 如果找到该文件,则在中下载spy ticker数据,并将该数据附加到中,并将其保存在csv文件中。 问题 我如何摆脱列,为什么会出现该列?
我在PHP(PDO)中遇到了这种情况; 我正在实现一个从MySql中检索数据的方法,并且做得很好,但问题是重复的数据恢复为关键骨,没有任何值,但其他数据附加更多,留下脚本和图像以了解更多细节; data.php 可变检验 json重复 预期结果
在将数据从行编辑输入到QTableWidget后,如何使用数据库检查Tableview中的重复数据?
校验者: @文谊 翻译者: @ゞFingヤ 对于一些应用程序,需要被处理的样本数量,特征数量(或两者)和/或速度这些对传统的方法而言非常具有挑战性。在这些情况下,scikit-learn 有许多你值得考虑的选项可以使你的系统规模化。 6.1. 使用外核学习实例进行拓展 外核(或者称作 “外部存储器”)学习是一种用于学习那些无法装进计算机主存储(RAM)的数据的技术。 这里描述了一种为了实现这一目的
null 到目前为止,我已经: 其他简单的验证工作正常,但不能完成这个验证。有人能帮你提点主意吗?谢了!
我使用Slim框架创建了一个PHP API。问题是,当我将API移动到新服务器时,我开始对响应产生问题。响应正文中的数据正在复制 例如,不要在响应中只获取一次: {data:[{用户名:'某人',密码:'某物'}]} 我明白了: {data:[{用户名:'某人',密码:'某物' }] } {data:[{用户名:'某人',密码:'某物' }] } {data:[{用户名:'某人',密码:'某物'}