有人对 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,这至少是我对选择的看法。