12ノードの赤色シフトクラスタに40億行のデータがあります。私は正常にRpostgreqsqlパッケージでそれに接続することができ、dplyrを使って基本的なデータを争うことができます。postgreSQL(Redshift)データベースの "big"データにtidyr(またはそれに類似したデータ)を使用する方法
しかし、通常はreshape2(dcast)またはtidyr(spread)を使用してデータを再構成する必要があります。私はどちらのパッケージもデータベースオブジェクトで実行されないことを発見しています。私は "収集"を実行することができますが、データフレームが大きすぎてメモリに収まらないため(DB内で実行したいという理由で)問題があります。私の全体的な目標は、プロセスで0/1フラグを作成しながら、データを広げるためにdcast/spreadを使用することです。これは、私のマシン上のデータの小さなサンプルでは魅力的ですが、DB上ではあまりうまくいかないようです。
以下は私が働いているコードです。 DBに接続し、dplyrで基本的なフィルタリングを行います。私は/ reshape2をtidyr使用しようとすると、R「は認識されないタイプ」という構文エラーをスロー
Redshift <- src_postgres('dev',
host = 'xxx.aws.com',
port = 5439,
user = "user",
password = "pwd")
### create table reference ###
df <- tbl(Redshift, "df_cj_allact")
# simple and default R commands analyzing data frames
dim(df)
colnames(df)
head(df)
df2 <- df %>% filter(id != '0') %>% arrange(id, timestamp, category) # seems to work!
# 2157398, was 2306109 (6% loss)
ご意見ありがとうございます。より大きいメモリ+ data.tableを持つマシンを使用することに関して...これはうまくいくかもしれません。私は、重いプロビジョニングされたAWS EC2インスタンスを持っています。 Data.tableとtidyrを使用する利点はありますか? – leaRningR909
data.tableは非常に大きなオブジェクトのために設計されています。これは、data.tableオブジェクト用に最適化されたdcastとmelt関数を持ち、reshape2からdcast/meltと同じ働きをします。私はtidyr関数はより論理的だと思いますが、それは個人的な好みかもしれませんが、ネイティブのdata.tableオブジェクトで動作するかどうかはわかりません。代わりに最初にtbl_dfクラスに変換されるかもしれません。 – kismsu
これに関連する[問題](https://github.com/tidyverse/tidyr/issues/189)があります。それは、「ちょっとした」人に当てはまるもののように思える。 –