java导数据到esid重复,代码主要逻辑如下:
// 读取要导入数据的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 开启批量插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex("test", "all")
.setSource(json));
// 每一千条提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
System.out.println("提交了:"count);
}
count;
}
bulkRequest.execute().actionGet();
System.out.println("插入完毕");
br.close();
登录后复制
?
运行后发现一个问题 , 我100多万条的数据,导入到es中怎么生成了1000多万条 , 而且还是在没有完全导入的情况下
然后用小批量数据导入到es,再把这些数据导出来,发现有好多重复的数据
为什么会重复呢,原因是在每一千条提交一次代码这块,第一次一千条提交了,并没有把bulkRequest置空,所以第二次提交的时候,会提交两千条,包括第一次已经提交的一千条,然后我们自己也没有设置_id,所以es会自动给数据生成一个_id,即使是重复的数据,搞清楚了原因,下面来说解决方法,主要有两种:
第一种就是在提交了一千条后,对bulkRequest进行重置,因为bulkRequest并没有重置的方法,所以可以新建一个bulkRequest,类似于重置 , 具体代码如下:
// 读取要导入数据的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 开启批量插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex("test", "all")
.setSource(json));
// 每一千条提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
//此处新建一个bulkRequest,类似于重置效果
bulkRequest = client.prepareBulk();
System.out.println("提交了:"count);
}
count;
}
bulkRequest.execute().actionGet();
System.out.println("插入完毕");
br.close();
登录后复制
?
第二种就是自己设置_id,确保每一条数据只有一个_id,这样的话,即使数据重复了,因为_id是一样的,所以es会进行更新,这样的话并没有从根源上解决数据重复的问题 , 只是重复数据会更新,这样的话效率会慢,具体代码如下:
// 读取要导入数据的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 开启批量插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
//设置_id为count
bulkRequest.add(client.prepareIndex("test", "all",
String.valueOf(count)).setSource(json));
// 每一千条提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
//此处新建一个bulkRequest,类似于重置效果
System.out.println("提交了:"count);
}
count;
}
bulkRequest.execute().actionGet();
System.out.println("插入完毕");
br.close();
登录后复制
?
建议使用第一种方法,效率会快很多 。
java程序 , 找出文件中的重复数据数据 。你声明的String数组,在你 new 的时候,里面的所有元素都为 null , 所以你在使用 equals 方法的时候一定要注意a[i] 是不是等于 null 呢 , 你的程序中缺少这个判断
Java中能取出List里的相同数据;比如{ { 1,2,3,4,5,6},{11,22,33,44,55,6},{12,13,14,15,16,6} };寻找相同的数据, 可以使用多种方式,下面简单介绍2种
第一种: 循环遍历,然后在把每一个元素,在其他集合里查找, 如果都存在该元素,就把这个元素保存起来
第二种: java8流处理, 原理差不多, 但是语法比较简洁
稍微注意的是list1 = {'A','A','B'}和list2 = {'A','C'} 如果粗糙的求交集,会得到一个交集结果{'A','A'}, 但是如果要严格取交集那么结果是一个'A'
解决起来很简单, 创造一个boolean[] b2=new boolean[list2.size]; 该boolean数组用于标记,list2的元素,哪些被使用了,哪些没有被使用.被使用的立刻标记为true .下次不再使用.
简单的参考代码: 可以按照自己的需求进行扩展和完善
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
public class Demo1 {
//为了方便, 全部定义成静态属性,方便静态方法内使用
static ArrayListInteger list1 = new ArrayListInteger(Arrays.asList(1, 2, 3, 4, 5, 6));
static ArrayListInteger list2 = new ArrayListInteger(Arrays.asList(11, 22, 33, 44, 55, 6));
static ArrayListInteger list3 = new ArrayListInteger(Arrays.asList(12, 13, 14, 15, 16, 6));
public static void main(String[] args) {
test1();//java8 流处理
test2();//传统遍历循环进行处理
}
//流处理求交集
private static void test1() {
【java代码获取重复数据 java代码获取重复数据的方法】System.out.println("list1,list2,list3的交集是:");
list1.stream().filter(num - list2.contains(num)list3.contains(num)).collect(Collectors.toList()).stream()
.forEach(System.out::println);
}
//循环遍历求交集
private static void test2() {
ArrayListInteger result = new ArrayListInteger();
for (Integer num : list1) {
if (list2.contains(num)list3.contains(num)) {
result.add(num);
}
}
System.out.println("list1,list2,list3的交集是:");
for (Integer i : result) {
System.out.println(i);
}
}
}
利用java求文件数据中的重复数据把String a[]=new String[7403];这个数组换成HashSetString a = new HashSetString(),读取一个数据后用add方法添加,如果HashSet中存在该字符串了,就会返回false 。
java获取list相同的数据可以用LIST集合java代码获取重复数据的方法contains判断一个元素是否在集合java代码获取重复数据的数据中存在 。
java取List中重复的数据!package acc.testJSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class AA {
public static void main(String[] args) {
ListMapInteger,String list=new ArrayListMapInteger,String();
MapInteger,String map2=new HashMapInteger,String();
map2.put(1, "美元");
map2.put(2, "日元");
map2.put(3, "欧元");
map2.put(4, "日元");
map2.put(5, "人民币");
map2.put(10, "欧元");
list.add(map2);
System.out.println("--------之前---------------");
for(int i=0;ilist.size();i){
MapInteger,String tempMap=list.get(i);
for(EntryInteger,String e:tempMap.entrySet()){
System.out.println("K: " e.getKey() " v: " e.getValue());
}}
System.out.println("---------------------开始处理--------------------------");
ListMapString,Integer newList=new ArrayListMapString,Integer();
AA aa=new AA();
newList=aa.executMoedth(list);//如果有相同的
System.out.println("--------之后---------------");
for(int i=0;inewList.size();i){
MapString,Integer tempMap=newList.get(i);
for(EntryString,Integer e:tempMap.entrySet()){
System.out.println(e.getValue() ":" e.getKey());
}}
}
public ListMapString,Integer executMoedth(ListMapInteger,String list){
System.out.println("---------------------处理中--------------------------");
ListMapString,Integer newList=new ArrayListMapString,Integer();
MapString,Integer newMap=new HashMapString,Integer();
for(int i=0;ilist.size();i){
MapInteger,String tempMap=list.get(i);//第i个list中的Map
for(EntryInteger,String e1:tempMap.entrySet()){//map遍历
int tempi=0;
for(EntryInteger,String e2:tempMap.entrySet()){//map遍历
if(e1.getValue().equals(e2.getValue())){//如果相等
if(!e1.equals(e2))
/* tempi;
if(tempi=1)*/
{
// newMap.remove(e1.getKey());//移除第一个添加的
int newValus=e1.getKey() e2.getKey();//得到总钱数
String newKey=e1.getValue();
newMap.remove(e1.getValue());//干掉
newMap.remove(e2.getValue());//干掉
System.out.println("找到一个 已处理:" newKeynewValus);
newMap.put(newKey,newValus);//新集合
}
//如果新集合里没有的
if(!newMap.containsKey(e1.getValue()))
newMap.put(e1.getValue(),e1.getKey());//新集合
}
}
}
newList.add(newMap);//新集合
}
return newList;
}
}
java代码获取重复数据的介绍就聊到这里吧 , 感谢你花时间阅读本站内容 , 更多关于java代码获取重复数据的方法、java代码获取重复数据的信息别忘了在本站进行查找喔 。
推荐阅读
- 红枣直播卖货话术怎么说,直播卖红枣的流程
- 是什么导致路由器变慢了,路由器变慢了怎么回事
- 小米电视怎样安装体育竞技游戏,小米电视如何安装游戏软件
- 区块链小侠,区块链小币种
- vb.net简单源码 vbnet implements
- 环信开源flutter,环信开源协议
- switch飞行设计游戏,switch飞行射击游戏排行
- 安康网络推广如何做好,安康网络推广如何做好工作
- 调用php数据 如何调用php文件