SparkR vs sparklyr [关闭]

Posted

技术标签:

【中文标题】SparkR vs sparklyr [关闭]【英文标题】:SparkR vs sparklyr [closed] 【发布时间】:2017-01-22 11:57:56 【问题描述】:

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

最好的

【问题讨论】:

【参考方案1】:

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

【讨论】:

由于2017-06-05,未发布版本的sparklyr (0.6.0)可以通过新添加的spark_apply()函数运行“大规模分布式R代码”。来源:github.com/rstudio/sparklyr/blob/…【参考方案2】:

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

【讨论】:

【参考方案3】:

我可以给你sparklyr的亮点:

支持dplyr、Spark ML和H2O。 分布于CRAN。 易于安装。 Extensible。

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

【讨论】:

您的 sparklyr 链接错误。应该是:spark.rstudio.com 0.6 现在支持任意并行代码执行。【参考方案4】:

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

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

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

如果您没有安装阅读器和摘要包,请安装它们。

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:

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

或者,如果您使用的是 RStudio,则可以安装 RStudio Preview Release,其中包含 Hadoop winutils.exe 的嵌入式副本。

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

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

我希望这会有所帮助。

干杯。

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

有一个扩展来帮助缩小tidyr的差距:mitre.github.io/sparklyr.nested【参考方案6】:

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

【讨论】:

问题是 sparklyr 没有对使用 spark 1.6、2.0、2.3 等之间的细微差别进行基准测试,也没有技术支持来验证与 Hive 一起生产化 spark ETL 的最佳方法,或者其他原生 Hadoop 服务……旨在实现稳健且可重复的生产级流程。至少在 SparkR 的问题上,MapR、Cloudera 或 Hortonworks 的开发团队可以参与进来,因为他们支持所有这些 apache 平台。【参考方案7】:

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

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

我的结论是sparklyrSparkR 更可取。最显着的优点是:

    通过与dpylr 的兼容性更好地处理数据 更好的函数命名约定 用于快速评估 ML 模型的更好工具 更容易在 Spark DataFrame 上运行任意代码

【讨论】:

以上是关于SparkR vs sparklyr [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用SparkR的Sparklyr:麻烦解析函数参数

在 sparklyr 中禁用 hive 支持

sparklyr 可以与部署在纱线管理的 hadoop 集群上的 spark 一起使用吗?

R︱Rstudio 1.0版本尝鲜(R notebook下载链接sparkR代码时间测试profile)

SparkR

为啥 VS 2008 sp1 在 Win7 RC 上安装 abort?