2017-06-16 6 views
2

私はsparklyrを使用して分析を行っていますが、DBIを使用して未加工のSQLクエリを書くことにも興味があります。DBI/Spark:結果をSpark Dataframeに保存する方法は?

私は次のクエリ

query <- "SELECT col1, FROM mydata WHERE some_condition" 
dataframe <- dbGetQuery(spark_connection, query) 

を実行することができていますが、これは(データフレームで)Rにデータを返します。

私が代わりにしたいのは、データをSpark内に保持し、別のスパークデータフレームに保存して、sparklyrとさらにやりとりすることです。

アイデア?

+1

DBIを使用して問題はメモリです。あなたはそれで大量のデータを取得することはできません。クエリの結果が膨大な量のデータを返すと、sparkのドライバメモリが圧倒され、メモリ不足が発生します。したがって、小さなデータセットを返すためにこのメソッドを使用したい場合は、この問題を引き起こす必要はありません。 – eliasah

+0

それはポイントではありません。私はSparkのデータフレームに取り組み、データをスパークさせたいと思っています。それ以降のSQLクエリーでは、Rでデータを取得します。 –

+1

DBIはあなたのための解決策ではありません。もしあなたがそのRのためにスティックしたいのであれば、通常のSparkRを使用しなければなりません。 – eliasah

答えて

1

DBIを使用した場合の問題はメモリです。あなたはそれで大量のデータを取得することはできません。クエリの結果が膨大な量のデータを返すと、sparkのドライバメモリが圧倒され、メモリエラーが発生します...

sparklyrではどうなっているのですか? DBIsqlコマンドaを実行すると、R DataFrameが返されます。これは、通常のRコンテキストでデータを収集するためにデータを収集していることを意味します。

このように、小さなデータセットを返すために使用したい場合は、そのような問題を引き起こす必要はありません。

次にDBIはあなたのための解決策ではありません;もしあなたがRをつけたいのであれば、普通のSparkRを使うべきです。

これは、あなたがsparkrsqlを使用する方法の例です:

sc %>% spark_session %>% 
    invoke("sql", "SELECT 1") %>% 
    invoke("createTempView", "foo") 
関連する問題