为什么在R到SparkyR中使用spark的速度如此之慢?

为什么在R到SparkyR中使用spark的速度如此之慢?,r,apache-spark,dplyr,sparklyr,R,Apache Spark,Dplyr,Sparklyr,我在SparkyR软件包中使用了SparkyR,但是速度非常慢。我对Spark还是个新手,所以可能我用错了,或者我的期望是错的。 我运行哪个命令并不重要,一切似乎都比使用普通R慢得多 版本: R 3.6.3、dplyr_1.0.2、SparkyR_1.4.0、Spark3.0.0 这里的一个例子就是使用pull()检索数据 library(sparklyr) library(dplyr) sc <- spark_connect(master = "local")

我在SparkyR软件包中使用了SparkyR,但是速度非常慢。我对Spark还是个新手,所以可能我用错了,或者我的期望是错的。 我运行哪个命令并不重要,一切似乎都比使用普通R慢得多

版本: R 3.6.3、dplyr_1.0.2、SparkyR_1.4.0、Spark3.0.0

这里的一个例子就是使用pull()检索数据

library(sparklyr)
library(dplyr)

sc <- spark_connect(master = "local")  

iris_x_5 <- as.data.frame(Reduce(cbind, rep(iris, 5)))

sp_iris_x_5 <- copy_to(sc, iris_x_5, overwrite = TRUE)

repeats <- 100

rbenchmark::benchmark(
  "plain R" = {
    iris_x_5 %>% pull(1)
  },
  "spark" = {
    sp_iris_x_5 %>% pull(1)
  }, 
  replications = repeats)
这只是spark和R之间交换数据的开销吗?我的意思是,我们在这里讨论的是一个有150个数值的向量,它如何用34秒进行100次重复

使用spark_apply,情况会变得更糟。这段代码所做的唯一一件事就是创建一个row-id列(在没有spark_应用的情况下可能是可行的,但这并不会改变这一点)

此外,当数据集变得越来越大时,复制要花费很长时间。我试图加载一个包含300k行和400列的数据帧,但大约一个小时后就放弃了

可能与所有这些相关的是,每当我在新的R会话中使用Sparkyr和dplyr时,我都会收到有关不推荐使用的函数的警告。 例如,第一次执行

sp_iris_x_5 %>% pull(1)
给我

1: `overscope_eval_next()` is deprecated as of rlang 0.2.0.
Please use `eval_tidy()` with a data mask instead.
This warning is displayed once per session. 
2: `overscope_clean()` is deprecated as of rlang 0.2.0.

但如上所述,所有内容都是最新的,因此我真的不知道如何处理这些信息。

尝试重写您的帖子,使您只问一个问题,而不是2-3个问题。
     test replications elapsed relative user.self sys.self user.child sys.child
1 plain R           10   0.026    1.000     0.025        0       0.00      0.00
2   spark           10  31.206 1200.231     4.492        2       0.08      2.02
sp_iris_x_5 %>% pull(1)
1: `overscope_eval_next()` is deprecated as of rlang 0.2.0.
Please use `eval_tidy()` with a data mask instead.
This warning is displayed once per session. 
2: `overscope_clean()` is deprecated as of rlang 0.2.0.