リレーショナル データベースに接続できない、または接続したくないが、代わりに Excel ファイルにエクスポートされたデータを操作することを好むユーザーがいます。これらのデータベース データからエクスポートされたレコードセットは、かなり大きくなる可能性があります。(CSVファイルにもエクスポートします)。
私の質問はこれに関連しています: R から Excel に書き込むときに java.lang.OutOfMemoryError を処理します。
この質問に対する受け入れられた回答 (または最初のコメント) で推奨されているように、Rcpp ベースのopenxlsx
パッケージを使用して、データベースからいくつかのビューをエクスポートします。エクスポートに最大 67000 行ある場合は機能しますが、より大きなデータセット (最大 100 万行、最大 20 パラメータ、いくつかの日時を除いてすべて数値)では機能しません。
openxlsx::write.xlsx(data, file = "data.2008-2016.xlsx") # 800000 rows
Error: zipping up workbook failed. Please make sure Rtools is installed or a zip application is available to R.
Try installr::install.rtools() on Windows
(私は Linux PC を使用しており、/usr/bin/zipはR で使用できます)
openxlsx パッケージのメモリを増やすことはできますか? または、調整可能なオプションを設定して、大規模なデータセットでのパフォーマンスを向上させますか?
openxlsx の場合options(java.parameters = "-Xmx1000m")
、java ベースの xlsx パッケージのようなものはありますか?
openxlsx ビネットには、オプションについては言及されていません。しかし、文書化されていない方法やオプションがいくつかあるのではないでしょうか? (保存中にプログレスバーを表示するなど)
この時点で、次のように進めます。不要なアプリをすべて閉じ、Rstudio を再起動し、グローバル環境に大きなオブジェクトをほとんどまたはまったく保持せず、db にクエリを実行してから を実行しますwrite.xlsx()
。このような「白紙の状態」で、800000 行のデータセットを 93MB の xlsx ファイルにエクスポートすることに成功しました。