54

有人对 SparkR 与 sparklyr 的优缺点有一个概述吗?谷歌没有产生任何令人满意的结果,两者看起来都非常相似。尝试两者,SparkR 看起来要麻烦得多,而 sparklyr 则非常简单(既要安装又要使用,尤其是使用 dplyr 输入)。sparklyr 只能用于并行运行 dplyr 函数还是“正常”R-Code?

最好的

4

7 回答 7

36

SparkR 的最大优势是能够在 Spark 上运行用 R 编写的任意用户定义函数:

https://spark.apache.org/docs/2.0.1/sparkr.html#applying-user-defined-function

由于 sparklyr 将 R 转换为 SQL,因此您只能在mutate语句中使用非常小的函数集:

http://spark.rstudio.com/dplyr.html#sql_translation

Extensions ( http://spark.rstudio.com/extensions.html#wrapper_functions )在一定程度上缓解了这种缺陷。

除此之外,sparklyr 是赢家(在我看来)。除了使用熟悉的函数的明显优势之外,sparklyr 还为 MLlib ( http://spark.rstudio.com/mllib.html ) 和上面提到的扩展dplyr提供了更全面的 API 。

于 2016-10-11T19:24:56.633 回答
6

有关概述和深入的详细信息,您可以参考文档。从文档中引用,“sparklyr 包提供了一个完整的 dplyr 后端”。这反映出 sparklyr不是原始 apache spark 的替代品,而是对其的扩展。

继续讨论它在独立计算机上的安装(我是 Windows 用户),您要么需要下载并安装新的 RStudio Preview 版本,要么在 RStudio shell 中执行以下一系列命令,

> devtools::install_github("rstudio/sparklyr")

如果您没有安装 readr 和 digest 软件包,请安装它们。

install.packages("readr")
install.packages("digest")
library(sparklyr)
spark_install(version = "1.6.2")`

安装软件包后,您尝试使用命令连接到本地 spark 实例;

sc <- spark_connect(master = "local")

您可能会看到一个错误,例如

在 C:\spark-1.6.2\tmp\hadoop 下创建了默认的 hadoop bin 目录 错误:

要在 Windows 上运行 Spark,您需要 Hadoop winutils.exe 的副本:

  1. 下载 Hadoop winutils.exe
  2. 将 winutils.exe 复制到 C:\spark-1.6.2\tmp\hadoop\bin

或者,如果您使用的是 RStudio,您可以安装包含 Hadoop winutils.exe 的嵌入式副本的RStudio 预览版。

错误解决方案已提供给您。前往 github 帐户,下载 winutils.exe 文件并将其保存到该位置,C:\spark-1.6.2\tmp\hadoop\bin然后再次尝试创建 spark 上下文。去年我在我的博客上发表了一篇综合文章,详细介绍了在 windows 环境下安装和使用 sparkR。

话虽如此,我建议不要通过在通常的 RStudio 上安装本地 spark 实例的痛苦路径,而是尝试RStudio 预览版。它将大大节省您创建 sparkcontext 的麻烦。继续往下看,这里有一篇关于如何使用 sparklyr 的详细文章R-bloggers

我希望这有帮助。

干杯。

于 2016-09-20T12:34:37.007 回答
6

作为一个包装器,有一些限制sparklyr。例如,copy_to()用于创建 Spark 数据框不会保留格式化为日期的列。使用SparkR,as.Dataframe()保留日期。

于 2016-11-29T08:47:48.113 回答
6

我可以为您提供sparklyr的亮点:

在当前0.4版本中,它还不支持任意并行代码执行。但是,可以很容易地用 Scala 编写扩展来克服这个限制,请参阅sparkhello

于 2016-09-27T22:30:35.330 回答
4

...从哈维尔添加到上述内容...

到目前为止,我可以找到,sparklyr 不支持 do(),仅当您想要执行 mutate、summarise 等允许的操作时才使用它。在引擎盖下,sparklyr 正在转换为 Spark SQL,但不支持 (还没有?)将 do() 转换为类似 UDF 的东西。

此外,到目前为止,我可以找到 sparklyr 不支持 tidyr,包括 unnest()。

于 2016-10-04T21:16:49.020 回答
3

由于我没有看到太多赞成的答案,sparkR我只想提一下,作为一个新手,我开始同时学习它们,我发现 sparkR api 与我使用的那个更密切相关 standard scala-spark。当我研究它们时,我的意思是我想使用rstudio和 scala,我需要在 sparkr 和 sparklyr 之间进行选择。将 sparkR 与 scala-spark api 一起学习,似乎比学习 sparklyr 更省力,至少在我看来,这与学习 sparklyr 不同。然而 sparklyr 似乎更强大。所以对我来说,这是一个问题,你是想使用更强大和更常用的库并得到社区的更多支持,还是妥协并使用与 scala-spark 中更相似的 api,这至少是我对选择的看法。

于 2018-01-13T07:21:47.540 回答
2

我最近写了一篇关于 SparkR 与 sparklyr 的优缺点的概述,这可能会引起人们的兴趣:https ://eddjberry.netlify.com/post/2017-12-05-sparkr-vs-sparklyr/ 。

帖子顶部有一个表格,粗略地概述了一系列标准的差异。

我得出结论,这sparklyrSparkR. 最显着的优点是:

  1. 通过兼容更好的数据操作dpylr
  2. 更好的函数命名约定
  3. 用于快速评估 ML 模型的更好工具
  4. 更容易在 Spark DataFrame 上运行任意代码
于 2017-12-07T11:10:54.297 回答