有人对 SparkR 与 sparklyr 的优缺点有一个概述吗?谷歌没有产生任何令人满意的结果,两者看起来都非常相似。尝试两者,SparkR 看起来要麻烦得多,而 sparklyr 则非常简单(既要安装又要使用,尤其是使用 dplyr 输入)。sparklyr 只能用于并行运行 dplyr 函数还是“正常”R-Code?
最好的
有人对 SparkR 与 sparklyr 的优缺点有一个概述吗?谷歌没有产生任何令人满意的结果,两者看起来都非常相似。尝试两者,SparkR 看起来要麻烦得多,而 sparklyr 则非常简单(既要安装又要使用,尤其是使用 dplyr 输入)。sparklyr 只能用于并行运行 dplyr 函数还是“正常”R-Code?
最好的
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 。
有关概述和深入的详细信息,您可以参考文档。从文档中引用,“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 的副本:
或者,如果您使用的是 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。
我希望这有帮助。
干杯。
作为一个包装器,有一些限制sparklyr。例如,copy_to()用于创建 Spark 数据框不会保留格式化为日期的列。使用SparkR,as.Dataframe()保留日期。
...从哈维尔添加到上述内容...
到目前为止,我可以找到,sparklyr 不支持 do(),仅当您想要执行 mutate、summarise 等允许的操作时才使用它。在引擎盖下,sparklyr 正在转换为 Spark SQL,但不支持 (还没有?)将 do() 转换为类似 UDF 的东西。
此外,到目前为止,我可以找到 sparklyr 不支持 tidyr,包括 unnest()。
由于我没有看到太多赞成的答案,sparkR我只想提一下,作为一个新手,我开始同时学习它们,我发现 sparkR api 与我使用的那个更密切相关 standard scala-spark。当我研究它们时,我的意思是我想使用rstudio和 scala,我需要在 sparkr 和 sparklyr 之间进行选择。将 sparkR 与 scala-spark api 一起学习,似乎比学习 sparklyr 更省力,至少在我看来,这与学习 sparklyr 不同。然而 sparklyr 似乎更强大。所以对我来说,这是一个问题,你是想使用更强大和更常用的库并得到社区的更多支持,还是妥协并使用与 scala-spark 中更相似的 api,这至少是我对选择的看法。