我在这篇文章中读到大数据构成的 R 语言是否适合大数据5TB
,虽然它很好地提供了有关使用此类数据的可行性的信息,R
但它提供的信息很少Python
。我想知道是否Python
也可以处理这么多数据。
Python适合大数据吗
澄清一下,我觉得 OP 的原始问题引用可能不是最好的 SO 类型格式,但我肯定会python
在这种特殊情况下代表。
首先让我说,无论您的数据大小如何,python
都不应该成为您的限制因素。事实上,在处理大型数据集时,您会遇到几个主要问题:
- 将数据读入内存——这是迄今为止大数据领域面临的最常见问题。基本上,您无法读取比内存 (RAM) 更多的数据。解决此问题的最佳方法是对数据进行原子操作,而不是尝试一次读取所有内容。
- 存储数据——这实际上只是上一期的另一种形式,当你开始学习大约
1TB
时,你开始不得不在其他地方寻找存储空间。AWS S3 是最常见的资源,并且python
具有出色的boto
库,可以帮助您处理大量数据。 - 网络延迟- 在不同服务之间移动数据将成为您的瓶颈。除了尝试选择位于同一地点的资源并插入墙上之外,您无法做很多事情来解决此问题。
在处理大数据时,您需要了解几件事 -
什么是大数据?
您可能知道著名的大数据 V 型 - Volume、Velocity、Variety...所以,Python 可能并不适合所有人。它适用于所有可用的数据科学工具。您需要知道哪种工具适用于什么目的。
如果处理大量数据:
- Pig/Hive/Shark - 数据清洗和 ETL 工作
- Hadoop/Spark - 分布式并行计算
- Mahout/ML-Lib - 机器学习
现在,您可以在中间阶段使用 R/Python,但您会意识到它们会成为您整个过程的瓶颈。
如果处理数据的速度:
- Kafka/Storm - 高吞吐量系统
人们在这里尝试使用 R/Python,但这又取决于您想要的并行性和模型的复杂性。
你想做什么样的分析?
如果您的模型要求首先将整个数据放入内存,那么您的模型不应该很复杂,因为如果中间数据很大,那么代码就会中断。而且,如果您考虑将其写入磁盘,那么您将面临额外的延迟,因为与 RAM 相比,磁盘读/写速度较慢。
结论
您绝对可以在大数据空间中使用 Python(当然,既然人们正在尝试使用 R,为什么不使用 Python),但首先要了解您的数据和业务需求。可能有更好的工具可用于相同的并且永远记住:
你的工具不应该决定你如何回答问题。你的问题应该决定你使用什么工具。
Python 有一些非常好的工具来处理大数据:
麻木的
Numpy 的内存映射数组让您可以访问保存在磁盘上的文件,就好像它是一个数组一样。只有您正在使用的数组部分需要加载到内存中。它可以像普通数组一样使用。
h5py 和 pytables
这两个库提供对 HDF5 文件的访问。这些文件只允许访问部分数据。此外,由于用于访问数据的底层库,许多数学运算和数据的其他操作可以在不将其加载到 python 数据结构中的情况下完成。大量、高度结构化的文件是可能的,比 5 TB 大得多。它还允许无缝、无损压缩。
数据库
有多种类型的数据库允许您存储大数据集并仅加载您需要的部分。许多数据库允许您在完全不将数据加载到 python 数据结构中的情况下进行操作。
熊猫
这允许对各种类型的数据进行更高级别的访问,包括 HDF5 数据、csv 文件、数据库,甚至网站。对于大数据,它提供了围绕 HDF5 文件访问的包装器,这使得对大数据集进行分析变得更加容易。
mpi4py
这是一个用于在多个处理器甚至多台计算机上以分布式方式运行您的 python 代码的工具。这使您可以同时处理部分数据。
黎明
它提供了一个普通 numpy 数组的版本,它以多核方式支持许多普通的 numpy 操作,可以处理太大而无法放入内存的数据。
火焰
专为大数据设计的工具。它基本上是上述库的一个包装器,为存储大量数据的各种不同方法(例如 HDF5 或数据库)和工具提供一致的接口,以使其易于操作、对数据进行数学运算和分析太大而无法放入内存。
绝对地。当您处理这种规模的数据时,通常会使用大数据框架,在这种情况下,python 或您使用的任何语言都只是一个接口。参见例如Spark 的 Python 编程指南。你有什么样的数据,你想用它做什么?