13

これが R のまったく新しい概念ではないことは承知しており、High Performance and Parallel Computing Task View を参照しました。そうは言っても、私はコンピューターサイエンスの正式なトレーニングを受けておらず、完全に独学であるため、無知からこの質問をしています。

最近、Twitter Streaming API からデータを収集しました。現在、生の JSON は 10 GB のテキスト ファイルに格納されています。ビッグ データを処理するように R を適応させることに大きな進歩があったことは知っていますが、この問題にどのように対処しますか? ここに私がやろうとしているタスクのほんの一握りがあります:

  1. データをデータ フレームに読み取って処理する
  2. テキストマイニングを含む基本的な記述分析(頻出用語など)
  3. プロット

これに R を完全に使用することは可能ですか、それとも、R に収まるほど小さいランダム サンプルを取得するために、データを解析してデータベースに投入する Python を作成する必要がありますか?

簡単に言えば、提供できるヒントや指針は大歓迎です。繰り返しますが、3 年生レベルでの解決策を説明しても、私は気分を害することはありません。

前もって感謝します。

4

4 に答える 4

11

一度に 10GB のファイル全体を操作する必要がある場合は、@Chase のポイントである、より大きな、おそらくクラウドベースのコンピューターを入手する必要があります。

(Twitter ストリーミング API は非常にリッチなオブジェクトを返します。1 つの 140 文字のツイートは、数キロバイトのデータの重さになる可能性があります。R の外部でデータを前処理して、著者名などの必要なコンテンツのみを抽出すると、メモリ オーバーヘッドを削減できる可能性があります。とツイートテキスト。)

一方、分析がデータのセグメント化に適している場合 (たとえば、最初につぶやきを作成者、日付/時刻などでグループ化する場合) は、Hadoop を使用して R を駆動することを検討できます。

確かに、Hadoop にはいくらかのオーバーヘッドが発生します (クラスターのセットアップと、基礎となる MapReduce モデルについての学習の両方)。しかし、大量のビッグデータ作業を計画している場合は、とにかくツールボックスに Hadoop が必要になるでしょう。

いくつかのポインタ:

  • Parallel Rの第 7 章の例は、大規模なツイート分析のために R と Hadoop をセットアップする方法を示しています。この例では RHIPE パッケージを使用していますが、概念はすべての Hadoop/MapReduce 作業に適用されます。

  • AWS/EC2 経由で Hadoop クラスターを取得することもできます。オンデマンド クラスターの Elastic MapReduce を確認するか 、Hadoop の展開をより詳細に制御する必要がある場合はWhirrを使用してください。

于 2011-12-02T14:13:14.460 に答える
5

colbycol膨大なテキスト ファイルから必要な変数だけを読み込むことができる、という新しいパッケージがあります。

http://colbycol.r-forge.r-project.org/

read.table 関数は R の主要なデータ インポート関数のままです。この関数はメモリ効率が悪く、R に読み込むためにデータセットのサイズの 3 倍のメモリが必要になると推定されています。

このような非効率性の理由は、R が data.frames を列としてメモリに格納する (data.frame は同じ長さのベクトルのリストに過ぎない) のに対して、テキスト ファイルはレコードの行で構成されるためです。したがって、R の read.table は行全体を読み取り、それらを個別に処理してトークンに分割し、これらのトークンを列指向のデータ構造に転置する必要があります。

ColByCol アプローチはメモリ効率が良いです。Java コードを使用して、tt は入力テキスト ファイルを読み取り、それをいくつかのテキスト ファイルに出力します。各ファイルには、元のデータセットの個々の列が含まれています。次に、これらのファイルは R に個別に読み込まれるため、R のメモリ ボトルネックを回避できます。

このアプローチは、多くの列に分割された大きなファイルに最適に機能します。特に、これらの列をメモリ効率の高い型とデータ構造に変換できる場合に最適です。数値の R 表現 (場合によっては) と、因子によってレベルが繰り返される文字ベクトルは、彼らのキャラクター表現。

パッケージ ColByCol は、2 GB のラップトップで複数 GB のデータセットを読み取るために使用されています。

于 2012-04-27T13:51:28.397 に答える
2

10 GB の JSON は、ストレージと分析の目的にはかなり非効率的です。を使えRJSONIOば効率よく読み込めます。次に、メモリ マップド ファイルを作成します。(私のお気に入り) を使用bigmemoryして、さまざまな種類の行列 (文字、数値など) を作成したり、HDF5 や SQL 風のバージョン (たとえば、RSQlite を参照) を使用してすべてを 1 つの場所に格納したりできます。

さらに興味深いのは、データの行数と列数です。

EC2 などの他のインフラストラクチャについては便利ですが、10 GB のメモリ マップ ファイルを準備するのにそれほど多くのインフラストラクチャは必要ありません。数千万行と数列 (ツイートの実際のテキストを超えて) で作業していると思われます。これは、メモリ マップ ファイルを効率的に使用するラップトップで簡単に処理できます。複雑な統計を行うには、より多くのハードウェア、使い慣れたパッケージのより賢い使用、および/またはいくつかのなじみのないパッケージでの実験が必要になります。その段階に達したら、より具体的な質問でフォローアップすることをお勧めします。このような作業の最初の段階は、単純にデータの正規化、保存、検索です。それに対する私の答えは簡単です。メモリ マップド ファイルです。

于 2011-12-05T18:40:46.390 に答える
0

JSON ファイルのチャンクを読み取るには、scan() 関数を使用できます。skip および nlines 引数を見てください。データベースを使用する場合と比較して、どの程度のパフォーマンスが得られるかはわかりません。

于 2011-12-01T15:40:40.340 に答える