使用SQL语法操作Spark DataFrame并将结果保存回群集中

问题描述 投票:1回答:1

我正在使用在Databricks群集上运行的RStudio服务器。我使用SQL语法在群集上操作DataFrame的一种方法是使用DBI包。例如,

library(DBI)
df <- dbGetQuery(sc, "select * from table_on_cluster")

但是,这会将结果另存为R对象(df)。我想继续对抗集群(通过sparklyr)。除了像下面这样,没有多余的步骤将其写回到群集中,我是否可以在一个步骤中完成此操作?

tbl_df <- copy_to(sc, df)

即,我希望将SQL语法的结果写入群集。上面的操作很痛苦,因为copy_to非常慢,尤其是对于大数据。

r apache-spark-sql sparkr sparklyr rstudio-server
1个回答
0
投票

如果表已在群集中注册,则只需使用dplyr::tbl函数来创建tbl_df对象。

tbl_df <- tbl(sc,"table_on_cluster")

然后您可以使用dplyr界面来操作Spark Data框架。

这里是使用iris数据的完整示例。

library(sparklyr)
library(dplyr)

sc <- sparklyr::spark_connect(master = "local")

# Let's suppose iris is your table
sdf_copy_to(sc, iris, name = "table_on_cluster")
src_tbls(sc)

tbl_df <- tbl(sc,"table_on_cluster")

tbl_df %>%
  filter(Species == "versicolor") %>%
  head(3)

结果:

# Source: spark<?> [?? x 5]
  Sepal_Length Sepal_Width Petal_Length Petal_Width Species   
         <dbl>       <dbl>        <dbl>       <dbl> <chr>     
1          7           3.2          4.7         1.4 versicolor
2          6.4         3.2          4.5         1.5 versicolor
3          6.9         3.1          4.9         1.5 versicolor
© www.soinside.com 2019 - 2024. All rights reserved.