순차적 검색이 가능한 데이터프레임 안에 담긴 자료를 가져올 때 next 메서드를 써서 데이터를 가져오는데
이때 하나의 값에 대해서 next가 두 번 나오게되면 발생하는 오류이다.
코드로 확인해보자.
===========================Java===========================
//수정 전 코드
while(mongoCursor.hasNext()) {
//key, value를 분리
String instance1 = (String) mongoCursor.next().get("_id");
Double instance2 = mongoCursor.next().getDouble("value");
key.add(instance1);
value.add(instance2);
System.out.println(instance1);
System.out.println(instance2);
}// end of while;
===========================Java===========================
MongoDB에서 데이터의 Java쪽으로 key와 value를 구분해서 꺼내는 코드이다.
while 안쪽에
String instance1 = (String) mongoCursor.next().get("_id");
Double instance2 = mongoCursor.next().getDouble("value");
이렇게 next() 메서드가 두 개 들어가있다.
이러면 아래와 같은 문제가 발생한다.
1. java.util.NoSuchElementException이 생긴다.
2. 데이터가 하나 건너서 들어간다.
1이면 그나마 확인할 수 있어 다행이지만 2의 경우가 문제이다.
오류는 안 나는데 데이터는 제대로 안 들어오기 때문이다.
조금 더 설명을 해보자면 아래와 같은 데이터가 있다고 해보자.
Data1 Data2 Data3 Data4 Data5 Data6.....
while 첫번째 루프에서 String instance1은 Data1번의 자료를 이용할 것이다.
[while의 첫번째 루프]
(*) <- String instance1
Data1 Data2 Data3 Data4 Data5 Data6.....
그런데 Double instance2로 가게되면 .next() 메서드로 인해 데이터가 하나 더 넘어가게 된다. 즉,
[while의 첫번째 루프]
(*) <- Double instance2
Data1 Data2 Data3 Data4 Data5 Data6.....
이렇게 된다는 것이다.
이런 현상을 방지하기 위해 .next()는 while 루프 내에서 한 번만 나와야 한다.
위의 코드를 고쳐보자면
===========================Java===========================
//수정 후 코드
while(mongoCursor.hasNext()) {
//while 루프 내 .next()는 한 번만 존재해야 한다.
Document doc = mongoCursor.next();
//key, value를 분리
String instance1 = (String) doc.get("_id");
Double instance2 = doc.getDouble("value");
key.add(instance1);
value.add(instance2);
System.out.println(instance1);
System.out.println(instance2);
}// end of while;
===========================Java===========================
이런 식으로 고치면 된다.
'프로젝트' 카테고리의 다른 글
[Java -> Python] Java 코드를 Python 코드로 바꾸기 (for, while문) (0) | 2018.05.23 |
---|---|
[Java -> Python] Java 코드를 Python 코드로 바꾸기 (if문) (0) | 2018.05.21 |
[Error] java.sql.SQLException: 부적합한 열 이름 (0) | 2018.04.30 |
[Error] ORA-00942: 테이블 또는 뷰가 존재하지 않습니다 (0) | 2018.04.30 |
[프로젝트 데이터 분석] 매출액과 아파트 면적, 가격, 기타 아파트 자료와의 상관관계 분석 및 시각화(상권배후지-추정매출) in R - MongoDB (0) | 2018.04.28 |