我正在尝试考虑 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")
这将非常快速地执行,因为log
并且ifelse
都是对向量进行操作的编译函数。然而,一个缺点是我们将循环两次。对于小型数据集,这无关紧要,但对于 Cassandra 支持的数据存储,我看不出这种方法是如何工作的。
问题:有没有办法保留第二个 API(如 R/Numpy/Matlab)但延迟计算。也许通过在最后调用一个同步(数据)函数?
另类的想法?维护 NumPy 类型语法会很好,因为用户将使用 NumPy 进行较小的操作,并且可以直观地掌握它的工作原理。