为什么选择python处理大数据

时间:2019-05-27 02:37:58

标签: python pandas bigdata data-science

PYTHON的垃圾回收错误。当增加到数百万条记录时,pandas数据框是如此之慢。 “应用”功能要比原始数据循环慢100倍以上,这是我上一个使用约150万行记录的项目的结果。我想知道python如何处理GB或TB大小的大数据。是否只是通过获得更好的硬件?

1 个答案:

答案 0 :(得分:0)

numpy(因此建立在其上的pandas)在将其用于其设计用途时非常有用:高级控制低级数组操作,在以便与低级语言一样创建高性能计算代码,但保留了高级语言的原型开发和开发速度。当apply和循环不支持您想做的事情并且仍然保留在numpy世界中,并且应该成为时,打破范式的方法>例外,而不是规则。

之所以这样,是因为(如果可能的话)numpy数据不是作为Python对象存储(如您所述,它很慢),而是作为连续的内存块存储(就像在C或Fortran中那样),并且处理该数据的代码也用C或Fortran编写。因此,使用numpy进行“正确编写”的代码最好通过告诉numpy来构造numpy数组(例如np.genfromtxtnp.zeros或类似的东西),然后纯粹通过numpy(例如np.diffnp.sum ...)来操作它们。

但是,每次您需要跨越本机代码和Python代码之间的边界时,都会遭受对象包装的开销,因为Python无法直接使用numpy的数据,{{1}也无法使用}有效地使用Python的数据。 numpy尤其会发生这种情况,它需要循环遍历np.apply数据,创建Python对象,将其传递给Python函数,然后解开结果以将其返回到numpy Universe中

这在TensorFlow之类的GPU库上更加明显,该库甚至没有选择在计算过程中滑回Python:您在Python中设置计算图,该图被编译为GPU代码,然后Python坐在返回并等待直到输出张量被填充。

用于GB大小。对于TB大小,通常无论采用哪种形式都无法将其装入内存,因此某种并行性或分块是必要的-无论使用哪种语言。

tl; dr:如果没有循环和/或numpy就无法编写代码,那么最好不使用apply