2017-06-16 42 views
2

我使用sparklyr來運行一些分析,但我也有興趣使用DBI編寫原始SQL查詢。DBI/Spark:如何將結果存儲在Spark Dataframe中?

我能夠運行下面的查詢

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

但這返回數據到R(在數據幀)。

我想要的是將數據保存在Spark中並將其存儲在另一個Spark Dataframe中,以便與sparklyr進一步交互。

任何想法?

+1

問題與使用DBI是內存。你將無法獲取大量的數據。如果你的查詢結果返回了大量的數據,這個意志將壓倒火花的驅動程序內存,並導致內存不足的錯誤......因此,如果你想用它來返回小的數據集,你不需要火花。 – eliasah

+0

沒關係。我想處理Spark數據框並將數據保存在spark中。只有在後面的一個,經過幾次更多的SQL查詢之後,我將把數據拉入R. –

+1

然後DBI不是您的解決方案;你應該使用普通的SparkR,如果你想堅持與R的那個 – eliasah

回答

1

使用DBI的問題是內存。你將無法獲取大量的數據。如果您的查詢結果返回大量的數據,將壓倒火花的驅動程序內存並導致內存不足錯誤...

sparklyr發生了什麼是以下內容。 DBI運行sql命令a返回R DataFrame這意味着它正在收集數據以在常規R上下文中實現它。

因此,如果你想用它來返回小的數據集,你不需要火花。

Then DBI不是您的解決方案;你應該使用常規的SparkR,如果你想堅持與R的。

這是你如何使用sqlsparkr一個例子:

sc %>% spark_session %>% 
    invoke("sql", "SELECT 1") %>% 
    invoke("createTempView", "foo") 
相關問題