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