我正在使用在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非常慢,尤其是对于大数据。
如果表已在群集中注册,则只需使用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