Sql DBI/Spark:如何将结果存储在Spark数据帧中?

Sql DBI/Spark:如何将结果存储在Spark数据帧中?,sql,r,apache-spark,sparklyr,r-dbi,Sql,R,Apache Spark,Sparklyr,R Dbi,我正在使用DBI运行一些分析,但我也对使用DBI编写原始SQL查询感兴趣 我能够运行以下查询 query <- "SELECT col1, FROM mydata WHERE some_condition" dataframe <- dbGetQuery(spark_connection, query) query使用DBI的问题是内存。你将无法用它获取大量数据。如果您的查询结果返回大量数据,将淹没spark的驱动程序内存并导致内存不足错误 Sparkyr的情况如下DBI运行sql

我正在使用
DBI
运行一些分析,但我也对使用
DBI
编写原始
SQL
查询感兴趣

我能够运行以下查询

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

query使用
DBI的问题是内存。你将无法用它获取大量数据。如果您的查询结果返回大量数据,将淹没spark的驱动程序内存并导致内存不足错误

Sparkyr的情况如下
DBI
运行
sql
命令a返回一个R
DataFrame
,这意味着它正在收集数据以在常规R上下文中具体化它

因此,如果您想使用它返回小数据集,就不需要spark


那么DBI不是您的解决方案;如果你想坚持使用R,你应该使用常规的SparkR

这是一个关于如何在
sparkr
中使用
sql
的示例:

sc %>% spark_session %>% 
   invoke("sql", "SELECT 1") %>% 
   invoke("createTempView", "foo")
你也可以这样做:

mydata_spark_df <- tbl(sc, sql("select * from mydata"))

mydata\u spark\u使用DBI的问题是内存。你将无法用它获取大量数据。如果您的查询结果返回大量数据,将淹没spark的驱动程序内存并导致内存不足错误。。。因此,如果您想使用它返回小数据集,您不需要spark;如果您想坚持使用R,那么应该使用常规SparkR。对于Sparkyr,情况并非如此。DBI运行sql命令a返回一个R数据帧,这意味着它正在收集数据以在常规R上下文中具体化它。dbSendQuery不提取任何记录。。。我认为它是用来缓存表、创建视图等(配置单元查询语言DSL)的。