R语言适合大数据吗


48

R有许多针对数据分析的库(例如JAGS,BUGS,ARULES等),并在流行的教科书中提到,例如:J.Krusche,Doing Bayesian Data Analysis;B.Lantz,“用R进行机器学习”。

我已经看到将数据集视为大数据的5TB准则。

我的问题是:R是否适合大数据问题中常见的数据量?在具有如此大小的数据集的情况下使用R时,是否有策略要采用?


4
除了下面的答案外,还需要记住的一件好事是,R所需的有关大数据的大多数事情都可以通过汇总数据集完成,而汇总数据集与原始日志相比非常小。从原始日志中进行采样还提供了一种无缝的方式,可以使用R来进行分析,而不必担心解析原始日志的行和行。例如,对于工作中的常见建模任务,我通常使用map reduce来将32 gbs的原始日志汇总为28mbs的用户数据以进行建模。
cwharland

Answers:


40

实际上这正在发生。在R in a Nutshell中,甚至有一章介绍了将R与Hadoop一起用于大数据处理。由于R在内存中完成了所有工作,因此需要做一些变通的工作,因此从根本上来说,您只能使用可用的RAM数量。

RHadoop是R和Hadoop的成熟项目

RHadoop已分为几个子项目,rhdfs,rhbase,rmr2,plyrmr和quickcheck(wiki)。


但是将R与Hadoop结合使用是否可以克服此限制(必须在内存中进行计算)?
Felipe Almeida 2014年

RHadoop确实克服了此限制。此处的教程:github.com/RevolutionAnalytics/rmr2/blob/master/docs/…清楚地说明了这一点。您需要转变为mapreduce思维方式,但是它确实将R的功能提供给了hadoop环境。
Steve Kallestad 2014年

2
值得一提的两个新选择是:SparkRdatabricks.com/blog/2015/06/09/…和h2o.ai h2o.ai/product都非常适合大数据。
wacax 2015年

30

对于大型数据集使用R的主要问题是RAM约束。将所有数据保留在RAM中的原因是,与HDD上存储的存储和存储相比,它提供了更快的访问和数据处理。如果您愿意提高性能,那么可以,在R中使用大型数据集是很实际的。

  • RODBC软件包:允许从R连接到外部数据库以检索和处理数据。因此,被操纵的数据仅限于您的RAM。整体数据集可能更大。
  • ff软件包允许利用内存映射页面使用大于RAM的数据集。
  • BigLM:在大数据上构建广义线性模型。它将数据分块加载到内存中。
  • bigmemory:一个R包,它允许对大量数据集进行功能强大且内存有效的并行分析和数据挖掘。它允许使用外部指针对象将大对象(矩阵等)存储在内存中(RAM上)。

1
另一个软件包是distributedR,它允许您使用RAM中的分布式文件。
adesantos

17

这里有一些好的答案。我想通过添加以下三个注释来加入讨论:

  1. 问题的重点上的数据量,同时参照大数据是可以理解的,有效的,特别是考虑到问题的数据量增长超过了技术能力每个指数增长的摩尔定律http://en.wikipedia.org/wiki/Moore %27s_law)。

  2. 话虽如此,重要的是要记住大数据概念的其他方面。根据Gartner的定义(重点是AB):“ 大数据是高容量高速度和/或种类繁多的信息资产,需要新的处理方式以增强决策,洞察力和流程优化。” (通常称为“ 3V模型 ”)。我之所以提及这一点,是因为它迫使数据科学家和其他分析人员寻找并使用R包,而这些R包关注的不是大数据的数量方面(由于庞大的R生态系统丰富性)。

  3. 尽管现有答案中提到了一些与大数据有关的R软件包,以获得更全面的介绍,但我还是建议您参考CRAN Task View “使用R进行高性能和并行计算”http://cran.r-project。 org / web / views / HighPerformanceComputing.html),尤其是“并行计算:Hadoop”“大内存和内存不足数据”部分


12

R非常适合“大数据”!但是,您需要一个工作流程,因为R受操作系统中RAM数量的限制(有些简化)。我采用的方法是与关系数据库进行交互(请参见RSQLite用于创建和与SQLite数据库交互的程序包),运行SQL样式的查询以了解数据的结构,然后提取数据的特定子集以进行计算密集型统计分析。

但是,这只是一种方法:有些软件包允许您与其他数据库进行交互(例如Monet)或在R中以较少的内存限制运行分析(例如,参见参考资料pbdR)。


9

考虑到另一个标准,我认为在某些情况下使用Python可能比R代表大数据。我知道R在数据科学教育材料中的广泛使用以及可以使用的良好数据分析库,但有时它仅取决于团队。

以我的经验,对于已经熟悉编程的人来说,与R之类的语言相比,使用Python提供了更大的灵活性和生产力提升,而R在语言方面与Python相比没有那么精心设计和强大。作为证明,在我大学的数据挖掘课程中,最好的最终项目是用Python编写的,尽管其他项目可以使用R的丰富数据分析库。也就是说,有时即使没有Python专用数据分析库,Python的整体生产率(考虑学习材料,文档等)也可能比R更好。另外,还有一些很好的文章解释了Python在数据科学中的快速发展:Python在Python中取代R丰富的科学数据结构 可能很快就会填补R可用库的空白。

不使用R的另一个重要原因是,在处理现实世界中的大数据问题时,与学术上唯一的问题相反,非常需要其他工具和技术,例如数据解析,清理,可视化,Web抓取以及许多其他工具和技术。使用通用编程语言要容易得多。这可能就是为什么许多Hadoop课程(包括Udacity的在线课程)中使用的默认语言是Python的原因。

编辑:

最近,DARPA还投资了300万美元来帮助资助Python在大数据工作中的数据处理和可视化功能,这显然标志着Python在大数据领域的未来。(详细


3
R很高兴可以用于数据处理(reshape2plyr和现在dplyr),而且我认为您不能做得比ggplot2/ ggvis可视化要好
天然龙舌兰2014年

@pearpies正如我在回答开始时所说的,我承认R可以使用好的库,但是总的来说,当考虑大数据所需的所有区域时(我在回答中提到了其中的几个),R不是与适用于Python的成熟且庞大的库匹配。
阿米尔·阿里·阿克巴里

1
来自Continuum Analytics(上面提到DARPA项目的公司之一)的Peter正在开发一些非常令人印象深刻的开放源代码以进行数据可视化,这些开放源代码仅能完成其他代码集无法完成的工作
2014年

5
这个答案似乎完全是轶事,几乎没有显示R相对于Python较弱的任何地方。
stanekam 2014年

哦,我的天啊!“作为证明,在我大学的数据挖掘课程中,最好的最终项目是用Python编写的,尽管其他项目可以使用R的丰富数据分析库。” 您想让读者尊重您的分析吗?哇。最好的项目是Python项目,除了它所使用的语言外,还会有其他因素吗?真的....
肖恩·梅汉

7

R非常适合进行大量分析。如前所述,针对MapR,RHadoop和RStudio的可扩展版本等大数据有新的改编。

但是,如果您关心的是库,请随时关注Spark。Spark是为大数据而创建的,比单独的Hadoop快得多。它具有增长迅速的机器学习,SQL,流和图形库。这样就可以在框架内完成很多(如果不是全部)分析工作(使用多种语言的API,我更喜欢Scala),而不必在语言/工具之间打乱。


4

正如其他答案所指出的那样,R可以与Hadoop和其他分布式计算平台一起使用,以将其扩展到“大数据”级别。但是,如果您不特别喜欢R,而是愿意使用“类似R”的环境,那么Incanter是一个对您来说效果很好的项目,因为它是JVM(基于Clojure)的本机,并且没有在自身和R所具有的Hadop之间没有“阻抗不匹配”。就是说,从Incanter,您可以调用Java本机Hadoop / HDFS API,而无需通过JNI桥或其他任何方法。


2

我距离专家还很远,但是我对这个主题的理解告诉我R(统计方面非常出色)和Python(在R缺乏的某些方面非常出色)之间可以很好地互补(如先前的文章所指出的) 。


0

我认为实际上在R中有大量用于处理大数据的工具。sparklyr将在该领域发挥重要作用。sparklyr是Apache Spark的R接口,允许与本地和远程集群连接,从而提供dplyr后端。还可以依靠Apache Spark的机器学习库。此外,还可以使用rmpi和snow(由用户控制)或doMC / foreach(基于系统)之类的多个软件包进行并行处理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.