R中的大数据处理与分析

时间:2011-12-01 14:32:01

标签: r bigdata

我知道这不是R中的任何新概念,我浏览了高性能和并行计算任务视图。话虽如此,我从无知的角度提出这个问题,因为我没有正式的计算机科学培训,完全是自学成才。

最近我从Twitter Streaming API收集数据,目前原始JSON位于10 GB文本文件中。我知道在调整R来处理大数据方面取得了很大进展,那么你将如何解决这个问题呢?以下是我要做的一些任务:

  1. 读取数据并将其处理为数据框
  2. 基本描述性分析,包括文本挖掘(常用术语等)
  3. 绘图
  4. 是否有可能完全使用R,或者我必须编写一些Python来解析数据并将其放入数据库中,以便随机抽取小到足以适合R的样本。

    简单地说,您可以提供的任何提示或指示将不胜感激。如果你描述三年级的解决方案,我也不会冒犯。

    提前致谢。

4 个答案:

答案 0 :(得分:11)

如果您需要同时操作整个10GB文件,那么我第二个问题是@ Chase关于获得更大的,可能是基于云的计算机的观点。

(Twitter流媒体API返回一个相当丰富的对象:一个140个字符的推文可能会产生几kb的数据。如果你在R之外预处理数据,只提取你需要的内容,你可能会减少内存开销。作为作者姓名和推文文本。)

另一方面,如果您的分析适合分割数据 - 例如,您希望首先按作者,日期/时间等对推文进行分组 - 您可以考虑使用Hadoop来驱动R.

当然,Hadoop会产生一些开销(集群设置和学习底层MapReduce模型);但是如果你打算做大量的大数据工作,你可能还是想在你的工具箱中使用Hadoop。

有几点指示:

  • Parallel R第7章中的一个示例演示了如何设置R和Hadoop以进行大规模的推文分析。该示例使用RHIPE包,但这些概念适用于任何Hadoop / MapReduce工作。

  • 您还可以通过AWS / EC2获得Hadoop集群。查看 弹性MapReduce 对于按需群集或使用 Whirr 如果您需要更多地控制Hadoop部署。

答案 1 :(得分:5)

有一个名为colbycol的全新软件包,可让您只从大量文本文件中读取所需的变量:

http://colbycol.r-forge.r-project.org/

  

read.table函数仍然是R中的主要数据导入函数   功能是内存效率低下的,根据一些估计,它   需要三倍于数据集大小的内存   将其读入R。

     

这种低效率的原因是R存储了data.frames   内存为列(data.frame不超过等长的列表   矢量)而文本文件由记录行组成。因此,R's   read.table需要读取整行,单独处理它们   分解代币并将这些代币转换为面向列的代币   数据结构。

     

ColByCol方法具有内存效率。使用Java代码,tt读取   输入文本文件并将其输出到几个文本文件中,每个文件都保存   原始数据集的单个列。然后,这些文件是   单独读入R,从而避免R的内存瓶颈。

     

该方法最适用于分为多列的大文件,   特别是当这些列可以转换成内存有效时   类型和数据结构:数字的R表示(在某些情况下)   通过因子占用重复级别的特征向量)   比他们的角色表现更少的空间。

     

包ColByCol已成功用于读取多GB数据集   在2GB笔记本电脑上。

答案 2 :(得分:2)

10GB的JSON在存储和分析方面效率很低。您可以使用RJSONIO有效地阅读它。然后,我将创建一个内存映射文件。您可以使用bigmemory(我最喜欢的)创建不同类型的矩阵(字符,数字等),或将所有内容存储在一个位置,例如使用HDF5或SQL-esque版本(例如参见RSQlite)。

更有趣的是数据行数和列数。

至于其他基础设施,例如EC2,这很有用,但准备10GB内存映射文件并不需要太多基础设施。我怀疑你只使用了几十万行和几列(超出Tweet的实际文本)。这可以通过有效使用内存映射文件在笔记本电脑上轻松处理。进行复杂的统计需要更多的硬件,更熟悉的软件包,和/或尝试一些不熟悉的软件包。当你到达那个阶段时,我建议你跟进一个更具体的问题。这种工作的第一阶段只是数据规范化,存储和检索。我的答案很简单:内存映射文件。

答案 3 :(得分:0)

要读取JSON文件的块,可以使用scan()函数。看看skip和nlines参数。我不确定与使用数据库相比你会获得多少性能。