Skip to content

Instantly share code, notes, and snippets.

@koduki
Last active July 10, 2017 16:36
Show Gist options
  • Save koduki/7807d8eda5d9985995c919a8d900a25a to your computer and use it in GitHub Desktop.
Save koduki/7807d8eda5d9985995c919a8d900a25a to your computer and use it in GitHub Desktop.

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")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment