DBI/Spark: 如何将结果存储在 Spark Dataframe 中?
DBI/Spark: how to store the result in a Spark Dataframe?
我正在使用 sparklyr
进行 运行 一些分析,但我也有兴趣使用 DBI
.
编写原始 SQL
查询
我能够运行以下查询
query <- "SELECT col1, FROM mydata WHERE some_condition"
dataframe <- dbGetQuery(spark_connection, query)
但是这个 returns 将数据放入 R(在数据帧中)。
我想要的是将数据保存在 Spark 中并将其存储在另一个 Spark Dataframe 中,以便与 sparklyr
.
进一步交互
有什么想法吗?
使用 DBI
的问题是内存。你将无法用它获取大量数据。如果你的查询结果 return 数据量很大,会压垮 spark 的驱动内存,导致内存不足的错误...
sparklyr 的情况如下。 DBI
运行 sql
命令 a returns an R DataFrame
这意味着它正在收集数据以在常规 R 上下文中实现它。
因此,如果您想将它用于 return 小型数据集,则不需要 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"))
我正在使用 sparklyr
进行 运行 一些分析,但我也有兴趣使用 DBI
.
SQL
查询
我能够运行以下查询
query <- "SELECT col1, FROM mydata WHERE some_condition"
dataframe <- dbGetQuery(spark_connection, query)
但是这个 returns 将数据放入 R(在数据帧中)。
我想要的是将数据保存在 Spark 中并将其存储在另一个 Spark Dataframe 中,以便与 sparklyr
.
有什么想法吗?
使用 DBI
的问题是内存。你将无法用它获取大量数据。如果你的查询结果 return 数据量很大,会压垮 spark 的驱动内存,导致内存不足的错误...
sparklyr 的情况如下。 DBI
运行 sql
命令 a returns an R DataFrame
这意味着它正在收集数据以在常规 R 上下文中实现它。
因此,如果您想将它用于 return 小型数据集,则不需要 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"))