2016-09-24 34 views
6

私はここでrの "大規模なデータプロセス"で比較的新しいです、どのように50 GBのcsvファイルを扱うかについてのいくつかのアドバイスを探してみたいです。r言語で50GBの大容量CSVファイルを扱うにはどうすればいいですか?

表のように見えている:現在の問題は、次のされ

ID,Address,City,States,... (50 more fields of characteristics of a house) 
1,1,1st street,Chicago,IL,... 
# the first 1 is caused by write.csv, they created an index raw in the file 

私は、サンフランシスコ、カリフォルニア州に属するされたすべての行を検索したいです簡単な問題だと思いますが、csvが大きすぎます。

私は私は2つのRでそれを行う方法と、それを処理するためにデータベースを使用するための別の方法を知っている:

(1)RのFFDFパッケージを使用する:

ファイルが保存されている前回、それをwrite.csvを使用していて、すべての異なるタイプが含まれています。

all <- read.csv.ffdf(
    file="<path of large file>", 
    sep = ",", 
    header=TRUE, 
    VERBOSE=TRUE, 
    first.rows=10000, 
    next.rows=50000, 
) 

コンソールは私にこれを与える:オンラインを通じて検索

Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered, 
: vmode 'character' not implemented 

、私は私の場合に適合していなかったいくつかの答えを見つけて、私は本当に「文字」を転送する方法を理解することはできません彼らが言及したように「因子」型に変換する。

次に、私はread.table.ffdfを使ってみましたが、これはもっと災害です。私はそれのためのしっかりしたガイドを見つけることができません。

(2)Rのreadlineの使用:

私は、これは別の良い方法です知っているが、これを行うためのeffecient方法を見つけることができません。

(3)使用するSQL:

私は、SQLのバージョンにファイルを転送する方法、そして私が試してみたいと思います良いガイドがある場合は、これを処理する方法を確認していません。しかし、一般的には、私はRに固執したいと思います。

お返事ありがとうございました!

+0

[この回答](http://stackoverflow.com/questions/23197243/how-do-i-read-only-lines-that-fulfil-a-condition-from-a-csv-into- r)が助けます。 –

+1

v。類似の静脈に^^リンクするhttp://stackoverflow.com/questions/26861951/using-read-csv-sql-to-select-multiple-values-from-a-single-column – user20650

+0

病気チェックアウトありがとう! – windsound

答えて

8

sqldfパッケージのカーテンの後ろにSQLiteでRを使用することができます。 sqldfパッケージのread.csv.sql関数を使用すると、小さなデータフレームを取得したいが、データをクエリできます。ドキュメントから

例:

library(sqldf) 

iris2 <- read.csv.sql("iris.csv", 
    sql = "select * from file where Species = 'setosa' ") 

私は良い結果に非常に大きなCSVファイルにこのライブラリを使用しました。

+1

ありがとうございました。現在の問題は、大きなデータファイルに余分なインデックスの列が含まれている、それを処理できるread.csv.sqlですか? :D – windsound

+1

大きなデータファイルに余分なインデックスの列が含まれている現在の問題は、それを修正できる方法はありますか?今すぐ2行目から最初の行よりも1つ多くのフィールドがあるとわかります。 – windsound

+0

@windsound私は正確にはわかりませんが、CSVファイルのように、記録。データを試してみる必要があります。問題の行を削除することもできますが、CSVデータが引用されておらず、アドレスデータや他のフィールドにカンマがある場合は、引き続き問題が発生し、引用符付きフィールドを使用してデータを再生成する必要があります。希望が役立ちます。 read.csv.sql関数には、データに応じてT/Fに設定できる見積もりパラメータがあります。がんばろう! –

3

これはコメントには長すぎます。

Rは基本的な構成で、データをメモリにロードします。記憶は安いです。 50ギガバイトはまだ典型的な構成ではありません(データをロードして保存するにはそれ以上のものが必要です)。あなたがRを本当にうまく利用しているなら、別の仕組みを理解することができます。クラスタにアクセスできる場合は、RまたはSparkのパラレルバージョンを使用できます。

また、データをデータベースにロードすることもできます。現在の課題では、データベースが問題に非常に適しています。 Rはほとんどすべてのデータベースに簡単に接続できます。そして、あなたがやりたいことに非常に役立つデータベースがあるかもしれません。

または、のテキストファイルを処理することができます。 awk、grep、perlなどのコマンドラインツールはこの作業に非常に適しています。私は一度の努力のためにこのアプローチをお勧めします。分析目的でデータを保持したい場合は、データベースをお勧めします。

+1

私はawkまたはgrepを使用する提案を2番目に出します!このような単一のクエリの場合、分単位で処理されます。 – vincentmajor

+1

@ GordonLinoff、RとSparkのあなたの提案も良いです。私はAWS上でバイナリファイルの〜4TBを裂くためにそれを使いました。 –

+0

以前はRが10GBのデータテーブルでうまく処理していたため、データベースタイプのものであることを認識するまでにはちょっと時間がかかりました....そして、ありがとうございました! – windsound

関連する問題