我正在尝试考虑Python API如何查找像Cassandra这样的大型数据存储。 R,Matlab和NumPy倾向于使用“一切都是矩阵”的表述,并分别执行每个操作。事实证明,此模型对于可放入内存的数据有效。但是,SAS对于大数据的好处之一是它逐行执行,在移至下一个之前执行所有行计算。对于像Cassandra这样的数据存储,此模型似乎是一个巨大的胜利-我们只循环一次数据。

在Python中,SAS的方法可能类似于:

with load('datastore') as data:
  for row in rows(data):
    row.logincome = row.log(income)
    row.rich = "Rich" if row.income > 100000 else "Poor"


这是(太?)显式的,但是具有仅循环一次的优点。对于较小的数据集,与NumPy相比,性能将非常差,因为未使用编译代码对函数进行矢量化处理。在R / Numpy中,我们将更加简洁和编译:

data.logincome = log(data.income)
data.rich = ifelse(data.income > 100000, "Rich", Poor")


这将很快执行,因为logifelse都是对向量进行运算的编译函数。但是,不利的一面是我们将循环两次。对于小型数据集,这无关紧要,但是对于由Cassandra支持的数据存储区,我看不到这种方法的工作原理。

问题:有没有办法保留第二个API(例如R / Numpy / Matlab),但会延迟计算。也许通过在最后调用sync(data)函数?

替代想法?维护NumPy类型的语法会很好,因为用户将使用NumPy进行较小的操作,并且将直观地了解其工作方式。

最佳答案

我对Cassandra / NumPy一无所知,但是如果您采用第二种方法(使用NumPy)来处理大小合理的块中的数据,则可能会受益于CPU和/或文件系统缓存,因此可以防止由于两次循环数据,而不会放弃使用优化处理功能的好处。

关于python - 在python中延迟执行大数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2009708/

10-11 17:43