79

「大きな」xlsxファイル(〜20Mb)からデータをインポートする方法を誰かが知っているかどうか疑問に思っています。xlsx および XLConnect ライブラリを使用しようとしました。残念ながら、どちらも rJava を使用しており、常に同じエラーが発生します。

> library(XLConnect)
> wb <- loadWorkbook("MyBigFile.xlsx")
Error: OutOfMemoryError (Java): Java heap space

また

> library(xlsx)
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
   java.lang.OutOfMemoryError: Java heap space

また、rJava をロードする前に java.parameters を変更しようとしました。

> options( java.parameters = "-Xmx2500m")
> library(xlsx) # load rJava
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
   java.lang.OutOfMemoryError: Java heap space

またはrJavaをロードした後(これは少しばかげていると思います):

> library(xlsx) # load rJava
> options( java.parameters = "-Xmx2500m")
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
   java.lang.OutOfMemoryError: Java heap space

しかし、何も機能しません。誰にもアイデアはありますか?

4

8 に答える 8

152

誰かが分析のために(さらに別の)Excelファイルを送ってきたとき、私はこの質問に出くわしました。これはそれほど大きくはありませんが、何らかの理由で同様のエラーが発生していました:

java.lang.OutOfMemoryError: GC overhead limit exceeded

以前の回答での @DirkEddelbuettel のコメントに基づいて、openxlsx パッケージ ( http://cran.r-project.org/web/packages/openxlsx/ ) をインストールしました。そして実行しました:

library("openxlsx")
mydf <- read.xlsx("BigExcelFile.xlsx", sheet = 1, startRow = 2, colNames = TRUE)

それはまさに私が探していたものでした。使いやすく、高速です。それは私の新しいBFFです。ヒント@DirkEddelbuettelをありがとう!

ところで、私は Dirk E からこの回答を盗み出したくないので、彼が回答を投稿した場合は、私の回答ではなく受け入れてください!

于 2014-08-14T21:28:09.167 に答える
16
options(java.parameters = "-Xmx2048m")  ## memory set to 2 GB
library(XLConnect)

Java コンポーネントがロードされる前に、「オプション」を使用してより多くのメモリを許可します。次に、XLConnect ライブラリをロードします (Java を使用します)。

それでおしまい。readWorksheet .... などでデータの読み込みを開始します。:)

于 2016-01-13T17:26:31.473 に答える
5

正規の Excel->R の質問で述べたように、出現した最近の代替案はreadxlパッケージから来おり、たとえばopenxlsxxlsx.

.csvとは言っても、スプレッドシートのサイズには明確な制限があり、それを超えると、ファイルを として保存してを使用した方がよいでしょうfread

于 2015-07-30T22:52:24.097 に答える
3

xlsx::read.xlsxと の両方でも同じエラーが発生しましたXLConnect::readWorksheetFromFile。おそらく、はるかに効率的な Microsoft RODBC を使用するRODBC::odbcDriverConnectとを使用できます。RODBC::sqlFetch

于 2015-06-24T14:25:57.000 に答える
0

まったく同じ質問に対する回答を探しているこのスレッドを見つけました。R内からxlsxファイルをハックしようとするのではなく、Pythonを使用してファイルを.csvに変換し、標準のスキャン機能を使用してファイルをRにインポートすることでした。

チェックアウト: https://github.com/dilshod/xlsx2csv

于 2014-06-19T00:44:17.823 に答える