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"))