私は Scala を使用して、列ストアの Cassandra から列を読み取ります。各列には多数のエントリ n が含まれます。ここで、n は 10 から 20 の間です。エントリのバッチ、つまり一度に 1000 を読み取り、エントリから列を作成する必要があります。各エントリには、グループ化に使用できる ID が添付されています。
現在、イテレータを使用してバッチ内のエントリを調べ、現在の ID と前の ID を比較して新しい列に到達しているかどうかを確認し、完了するまで多くのバッチを読み取ります。残りの列は次のバッチに含まれるため、各バッチ反復の最後に部分的な列を保存する必要があります。現在使用している基本的なアルゴリズムを示すために、いくつかの疑似コードを以下に示します。
機能的な方法でこれを行うにはどうすればよいでしょうか? (n が定数の場合、バッチ サイズを適切に設定できるため、これは単純な問題になります。)
擬似コード:
val resultBuffer // collects all columns
val columnBuffer // collects entries for current column
var currentId // id of current column
while(batchIterator.hasNext){
val batch = batchIterator.getNext
val entryIterator = batch.entries.iterator
while(entryIterator.hasNext){
val entry = entryIterator.next
if(entry.id != currentId) {
currentId = entry.id
resultBuffer += columnBuilder(columnBuffer)
columnBuffer.removeAll
columnBuffer += entry
} else {
columnBuffer += entry
}
}
}