2

Oracleデータベースからダウンロードしている非常に大きなデータセットを使用しています。データフレームには、約2,100万行と15列があります。私のOSはWindowsXP(32ビット)で、2GBのRAMがあります。短期的には、RAMまたはOSをアップグレードできません(動作中です。まともなPCを入手するまでに数か月かかります)。

library(RODBC)
sqlQuery(Channel1,"Select * from table1",stringsAsFactor=FALSE)

私はすでに通常の「xMbをベクターに割り当てることができない」で立ち往生しています。ffパッケージの使用に関する提案を見つけました。ffパッケージに精通している人が私の場合に役立つかどうか教えてくれるかどうか知りたいです。メモリの問題を回避する別の方法を知っていますか?64ビットソリューションは役に立ちますか?あなたの提案をありがとう。

4

4 に答える 4

3

私の経験では、データをチャンクで処理することは、ほとんどの場合、ビッグデータの処理に大いに役立ちます。たとえば、時間平均を計算する場合、任意の時点で1つのタイムステップのみがメモリに存在する必要があります。すでにデータベースにデータがあるので、サブセットを取得するのは簡単です。または、チャンクで簡単に処理できない場合は、いつでもデータのサブセットを取得しようとすることができます。分析を数回繰り返して、結果が取得するサブセットに敏感であるかどうかを確認します。肝心なのは、いくつかの賢明な思考は、2GbのRAMであなたを長い道のりに導くことができるということです。より具体的なアドバイスが必要な場合は、より具体的な質問をする必要があります。

于 2012-11-01T22:09:17.790 に答える
3

パッケージffを使用していて、SQLにデータがある場合は、パッケージETLUtilsを使用してffに簡単にデータを取得できます。ROracleを使用する場合の例については、ドキュメントを参照してください。

私の経験では、ffは、使用しているデータセットのタイプ(21 Mio行と15列)に完全に適しています。実際、列に変換される多くの文字データが含まれていない限り、セットアップはffに少し小さいです。因子(すべての因子レベルがRAMに収まる必要があることを意味します)。パッケージETLUtils、ff、およびパッケージffbaseを使用すると、ffを使用してRでデータを取得し、そのデータに対していくつかの基本的な統計を行うことができます。データやハードウェアで何をするかによっては、モデルを作成するときにサンプリングを検討する必要がある場合があります。私はデータをRに置き、サンプルとスコアに基づいてffのツール(チャンクなど)またはパッケージffbaseからモデルを構築することを好みます。

欠点は、データがffdfオブジェクトであり、特にRを初めて使用する場合は、時間がかかる可能性があるという事実に慣れる必要があることです。

于 2012-11-05T10:05:27.357 に答える
2

申し訳ありませんffが、RAMのトピックについては、Rデータフレームのメモリ使用量に精通していませんが、議論のために、各セルに8バイトが必要だとします(たとえば、倍精度浮動小数点数または長整数)。

21百万*15*8バイト=約2.5GB。

以下のコメントを更新して参照してください。この数字はおそらく過小評価です!

したがって、実際にはより多くのRAMを使用できます。また、32ビットマシンは4GBに制限されているため(そしてそれを完全に使用することはできません)、64ビットマシンは大いに役立ちます。

データセットのサブセットを試して、既存のRAMでロードできる量を把握し、外挿して実際に必要な量を見積もる価値があるかもしれません。データを細分化してチャンクに処理できれば、それは素晴らしいことですが、多くの問題はそのアプローチに簡単に従わないものです。

また、私はあなたがすべての列を必要としていると仮定しています!明らかに、サイズを縮小するために何らかの方法でデータをフィルタリングできる場合(たとえば、無関係な列を削除する場合)、それは大いに役立つ可能性があります!

于 2012-11-01T21:57:53.053 に答える
1

別の非常によく似た質問があります。特に、データを処理する1つの方法は、データをファイルに書き込んでから、メモリ領域をそのデータにマップすることです(たとえば、mmapパッケージを参照)。

于 2012-11-01T22:08:02.233 に答える