library(data.table)
library(arrow)
library(microbenchmark)
library(ggplot2)
nr <- 100000
nc <- 200
n <- nr * nc
d <- matrix(rnorm(n), nrow = nr, ncol = nc) |> as.data.frame()
d.a <- matrix('あ', nrow = nr, ncol = nc) |> as.data.frame()
書き込みはParquetよりCSV最速処理(data.table::fwrite)の方が速い。
乱数データ書込時間:
microbenchmark(
"data.table::fwrite" = {fwrite(d, 'd.csv')},
"arrow::write_parquet" = {write_parquet(d, 'd.parquet')},
times = 30L) |> autoplot(log = FALSE)
単一データ書込時間:
d.a <- matrix('あ', nrow = nr, ncol = nc) |> as.data.frame()
microbenchmark(
"data.table::fwrite" = {fwrite(d, 'd.csv')},
"arrow::write_parquet" = {write_parquet(d, 'd.parquet')},
times = 30L) |> autoplot(log = FALSE)
読み込みはCSV最速処理(data.table::fread)よりParquetの方が速い。
microbenchmark(
"data.table::fread" = {fread('d.csv')},
"arrow::read_parquet" = {read_parquet('d.parquet')},
times = 30L) |> autoplot(log = FALSE)
Parquetのファイルサイズは圧縮されているのでCSVより小さい。 CSVファイルも圧縮できるが時間が掛かる。
MB <- 2^20
round( file.size('d.csv') / MB )
## [1] 346
round( file.size('d.parquet') / MB )
## [1] 193
Parquetはファイルサイズがとても小さくビッグデータの蓄積に適している。 列指向フォーマットのため,読み込み速度は非常に速い。 複雑なクエリを用いた分析処理が多い, いわゆるOLAP(online analytical processing)用のファイルフォーマットである。