许多文本文件中的大量数据 - 如何处理?

hat*_*rix 32 python sql r large-data-volumes large-files

我有大量的数据(几TB)并累积......它们包含在许多制表符分隔的平面文本文件中(每个大约30MB).大多数任务涉及读取数据并基于一系列谓词语句聚合(求和/平均+附加转换)观察/行,然后将输出保存为文本,HDF5或SQLite文件等.我通常使用R对于这样的任务,但我担心这可能有点大.一些候选解决方案是

  1. 用C(或Fortran)写整个东西
  2. 直接将文件(表)导入关系数据库,然后在R或Python中删除块(某些转换不适用于纯SQL解决方案)
  3. 用Python编写全部内容

(3)是个坏主意吗?我知道你可以在Python中包装C例程,但在这种情况下,因为没有任何计算上的限制(例如,需要许多迭代计算的优化例程),我认为I/O可能与计算本身一样是瓶颈.您对进一步的考虑或建议有什么建议吗?谢谢

编辑感谢您的回复.关于Hadoop的看法似乎存在冲突,但无论如何我都无法访问集群(虽然我可以使用几台未经网络的机器)......

Ale*_*lli 14

(3)不一定是个坏主意 - Python可以很容易地处理"CSV"文件(尽管C代表Comma,tab作为分隔符同样容易处理)当然也可以获得大约相同的带宽在I/O操作中与任何其他语言一样.至于其他建议,numpy除了快速计算(根据你的陈述你可能不需要),它提供了非常方便,灵活的多维数组,这对你的任务来说非常方便; 并且标准库模块multiprocessing允许您为任何易于并行化的任务利用多个核心(重要的是,因为现在几乎每台机器都有多核;-).


Dir*_*tel 13

好吧,所以只是为了与众不同,为什么不R?

  • 你似乎知道R所以你可以快速地使用代码
  • 每个文件30 mb在标准工作站上并不大,只有几GB的内存
  • read.csv()变种read.table()如果通过指定类型的列可能是非常有效的colClasses,而不是guestimating类型转换,这将有效地处理:参数
  • 这里的瓶颈是来自磁盘的i/o,对于每种语言都是相同的
  • R具有多核设置并行处理在具有多个芯的机器(类似于Python的多处理,似乎)
  • 如果您想使用问题的"令人尴尬的并行"结构,R有几个非常适合数据并行问题的软件包:例如,snowforeach可以分别部署在一台机器上,也可以部署在一组联网机器上.

  • @Stephen别忘了检查这个帖子http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r (2认同)

Mar*_*tos 6

看看迪斯科吧.它是一个轻量级的分布式MapReduce引擎,用大约2000行Erlang编写,但专为Python开发而设计.它不仅支持处理数据,还支持可靠地存储复制.他们刚刚发布了0.3版,其中包括索引和数据库层.