2017-03-09 75 views
0

我正在使用Cassandra java驅動程序從Cassandra表中讀取數據。在執行查詢之後,我得到一個java.util.Iterator,並在for循環中讀取它。並行讀取java.util.Iterator

我不知道是否有任何可能性,我可以讀取這個迭代器並行而不是一次在for循環中的一個項目。

N個流媒體API(FS2?)中的任何一個都可以幫我嗎? (否我不能在此時使用Spark或Hadoop。)

回答

1

你試過Java 8 Spliterator

Spliterator是遍歷和分割源元素的對象。由Spliterator覆蓋的元素的源可以是例如 陣列,集合,IO通道或生成器函數。

如果這是更多的問題來並行化給定的集合,因爲你可以創建分區和處理每個分區。

例如。

Spliterator<CassandraRecord> cassandraRecordsSpliterator = recordsIterator.spliterator(); 

Spliterator<CassandraRecord> eachPartition = cassandraRecordsSpliterator.trySplit(); 

System.out.println(" " + eachPartition.estimateSize()); //will give you x 
System.out.println(" " + cassandraRecordsSpliterator.estimateSize()); // will have N - x