6

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)
4

1 に答える 1

2

tidyr パッケージはデータベース バックエンドをサポートしていません。メモリ データ内でのみ操作できます。dplyr は、メモリ内オブジェクトだけでなく、データベース テーブルでも動作します。より大きなメモリを備えたマシン (AWS など) を使用して data.table を使用するか、データの分割を検討することができます。

于 2016-02-17T10:02:23.790 に答える