SparkのRDDみたく巨大ファイルを透過的に分割処理するAPIイメージ
Record.partition(10).read("hoge.txt").map(line -> line.split(","))
内部実装的には下記ように変換?
IntStream.range(1, 10).parallel().mapToObj( n -> {
bulkSize = recordSize / 10
return FileSplitReader("hoge.txt", bulkSize*n, n) // 指定したレコード数を読み込んだStreamを返す
}).map(records -> records.map(line -> line.split(",")))
FileSplitReaderを適切に実装すればメモリに乗りきらないファイルを分割して並列処理出来る気がする。 SeekableByteChannelをベースにHaoopのFileSplitとかを参考にすればできそう?
別に独自のAPI作らなくても Record.partition(10).read("hoge.txt")