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 数据框不会保留格式化为日期的列。使用SparkR
,as.Dataframe()
保留日期。
【讨论】:
【参考方案3】:我可以给你sparklyr的亮点:
支持dplyr、Spark ML和H2O。 分布于CRAN。 易于安装。 Extensible。在当前0.4
版本中,尚不支持任意并行代码执行。但是,可以很容易地用 Scala 编写扩展来克服这个限制,请参阅sparkhello。
【讨论】:
您的 sparklyr 链接错误。应该是:spark.rstudio.com0.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,粗略概述了一系列标准的差异。
我的结论是sparklyr
比SparkR
更可取。最显着的优点是:
-
通过与
dpylr
的兼容性更好地处理数据
更好的函数命名约定
用于快速评估 ML 模型的更好工具
更容易在 Spark DataFrame 上运行任意代码
【讨论】:
以上是关于SparkR vs sparklyr [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
sparklyr 可以与部署在纱线管理的 hadoop 集群上的 spark 一起使用吗?