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返回一个RDataFrame
,这意味着它正在收集数据以在常规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)的。