12 ノードの redshift クラスターに 40 億行のデータがあります。Rpostgreqsql パッケージを使用して正常に接続し、dplyr を使用して基本的なデータ ラングリングを行うことができました。
ただし、通常は reshape2 (dcast) または tidyr (spread) を使用して行うデータの再形成を行いたいと考えています。どちらのパッケージもデータベース オブジェクトで実行されないことがわかりました。「収集」を実行できますが、そのデータフレームが大きすぎてメモリに収まらないため、問題が発生します(したがって、DBで実行したい理由です)。私の全体的な目標は、プロセスで 0/1 フラグを作成しながら、dcast/spread を使用してデータを広くすることです。これは、私のマシンではデータの小さなサンプルではうまく機能しますが、DB ではうまく機能しません。
以下は、私が取り組んでいる私のコードです。DB に接続し、dplyr で基本的なフィルタリングを行います。tidyr/reshape2 を使用しようとすると、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)