【发布时间】:2017-01-22 11:57:56
【问题描述】:
有人对 SparkR 与 sparklyr 的优缺点有一个概述吗?谷歌没有产生任何令人满意的结果,两者看起来都非常相似。尝试两者,SparkR 看起来要麻烦得多,而 sparklyr 则非常简单(既要安装又要使用,尤其是使用 dplyr 输入)。 sparklyr 只能用于并行运行 dplyr 函数还是“正常”R-Code?p>
最好的
【问题讨论】:
标签: r apache-spark sparkr sparklyr
有人对 SparkR 与 sparklyr 的优缺点有一个概述吗?谷歌没有产生任何令人满意的结果,两者看起来都非常相似。尝试两者,SparkR 看起来要麻烦得多,而 sparklyr 则非常简单(既要安装又要使用,尤其是使用 dplyr 输入)。 sparklyr 只能用于并行运行 dplyr 函数还是“正常”R-Code?p>
最好的
【问题讨论】:
标签: r apache-spark sparkr sparklyr
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/…
作为包装器,sparklyr 存在一些限制。例如,使用copy_to() 创建 Spark 数据框不会保留格式化为日期的列。使用SparkR,as.Dataframe() 保留日期。
【讨论】:
我可以给你sparklyr的亮点:
在当前0.4 版本中,尚不支持任意并行代码执行。但是,可以很容易地用 Scala 编写扩展来克服这个限制,请参阅sparkhello。
【讨论】:
0.6 现在支持任意并行代码执行。
有关概述和深入细节,您可以参考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:
或者,如果您使用的是 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。
我希望这会有所帮助。
干杯。
【讨论】:
...从哈维尔添加到上述内容...
到目前为止,我可以找到,sparklyr 不支持 do(),仅当您想要执行 mutate、summarise 等允许的操作时才使用它。在引擎盖下,sparklyr 正在转换为 Spark SQL,但不't(还没有?)将 do() 转换为类似 UDF 的东西。
此外,到目前为止,我发现 sparklyr 不支持 tidyr,包括 unnest()。
【讨论】:
tidyr的差距:mitre.github.io/sparklyr.nested
因为我没有看到太多支持 sparkR 的答案,所以我只想提一下,作为一个新手,我开始学习它们,我发现 sparkR api 与我使用的标准更密切相关scala-spark。当我研究它们时,我的意思是我想使用rstudio 和 scala,我需要在 sparkr 和 sparklyr 之间进行选择。将 sparkR 与 scala-spark api 一起学习,似乎比学习 sparklyr 更省力,至少在我看来,这与学习 sparklyr 不同。然而 sparklyr 似乎更强大。所以对我来说,问题是你想使用更强大和更常用的库并得到社区的更多支持,还是妥协并使用与 scala-spark 中更相似的 api,这至少是我的选择观点。
【讨论】:
我最近写了一篇关于 SparkR 与 sparklyr 的优缺点的概述,可能会感兴趣:https://eddjberry.netlify.com/post/2017-12-05-sparkr-vs-sparklyr/。
帖子顶部有一个table,粗略概述了一系列标准的差异。
我的结论是sparklyr 比SparkR 更可取。最显着的优点是:
dpylr 的兼容性更好地处理数据
【讨论】: