2016-10-17 2 views
2

나는 accumulo 쉘에 몇 개의 패밀리와 한정자가있는 누적 레코드라는 테이블을 가지고 있습니다.스칼라로 누적 테이블 반복하기

[email protected] records> scan 
2016-10-17 16:27:55,359 [Shell.audit] INFO : [email protected] records> scan 
E001 department:sales [] 0 
E001 hire_date:20160101 [] 0 
E001 name:bob [] 0 
E001 name:jerry [] 0 
E002 department:marketing [] 0 
E002 hire_date:20160202 [] 0 
E002 name:sarah [] 0 
E003 department:engineering [] 0 
E003 hire_date:20160303 [] 0 
E003 name:joe [] 0 

스칼라 커넥터를 사용하여이 두 행을 스캔 할 수 있기를 원합니다. 필요한 수입 후 내 코드는 다음과 같습니다.

var opts = new ClientOnRequiredTable() 
var bsOpts = new BatchScannerOpts() 
opts.parseArgs("test", Array("-t", "records","-u", "michaelp", "-p", "****", "-z", "zookeeper:2181", "-i", "accumulo"), bsOpts) 
var connector = opts.getConnector() 
var batchReader = connector.createBatchScanner("records", opts.auths, bsOpts.scanThreads) 
batchReader.setTimeout(bsOpts.scanTimeout, TimeUnit.MILLISECONDS) 
var x = new Range() 
var y = new LinkedList[Range] 
y.add(x) 
batchReader.setRanges(y) 

나는 테이블의 모든 행을 가져 오기 위해 빈 범위를 전달합니다. 문제는 내가 결과를 반복하려고 할 때입니다. 첫 번째 줄에 붙어 있습니다.

scala> while (batchReader.iterator.hasNext()) {println(batchReader.iterator.next.getKey().toString())} 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
E001 department:sales [] 1476720996135 false 
... 

왜 반복기가 움직이지 않는가?

답변

4

batchReader.iterator을 호출 할 때마다 매번 새로운 반복기가 만들어지기 때문에. 대신 아래처럼 뭔가를하십시오

val iterator = batchReader.iterator 

while(iterator.hasNext) { 
println(iterator.next.getKey().toString()) 
} 
+0

이것은 정답입니다 (초 단위로 체크 표시). 감사 – Mike