RipTable –用于numpy数组/数据集的多线程Python数据分析工具

2020-11-28 11:57:49

适用于具有多线程支持的numpy阵列的全功能,高性能64位python分析引擎。

增强或替换numpy,pandas,并包括高速跨平台SDS文件格式.RipTable经常可以以numpy或pandas的1.5到10倍的速度处理数字。

通过使用向量内在函数可以达到最大速度:手摇循环,使用带有AVX-512支持的AVX-256;并行计算:对于大型阵列,将部署多个线程;回收:内置数组垃圾回收;核心算法的哈希和并行排序。

FastArray:具有内置多线程数字运算的numpy数组的子类。所有期望numpy数组的scikit例程也将接受FastArray,因为它是子类的。 isinstance(fastarray,np.ndarray)将返回True。

数据集:替换pandas DataFrame类,并保留相等的行长numpy数组(包括> 1维)。

Struct:替换pandas Series类。 Struct是数据集子类的抓包集合类。

类别:替换熊猫groupby和类别类。 RipTable分类是多键的,可过滤的,可堆叠的,可归档的,并且可以链接诸如apply_reduce循环之类的计算。他们可以完成groupby可以做的所有事情。

日期/时间类:DateTimeNano,Date,TimeSpan和DateSpan的设计更像Java,C ++或C#类。替换大多数numpy和pandas日期时间类。

SDS:一种新的文件格式,可以使用zstd压缩,线程和没有额外的内存副本将多个数据集堆叠到多个文件中。 SDS还支持将数据集加载和写入共享内存。

FastArray是一个numpy数组,但是可以在不进行数组复制的情况下来回翻转它们(只是更改视图)。

只需将pandas DataFrame类放到可撕裂的数据集中,它将被自动转换。

导入rttable作为rt导入numpy作为np导入大熊猫作为pddf = pd.DataFrame({'intarray':np.arange(1_000_000),'floatarray':np.arange(1_000_000.0)})ds = rt.Dataset(df)

RipTable已公开开源,因为它需要更多的用户和更多的投入才能将其带入新的高度。 RipTable团队有信心该引擎是python数据分析计算的下一代构建块。我们需要报告错误,文档,改进的功能和新功能的帮助。请考虑github拉取请求或向团队发送电子邮件。

RipTable的开发已经进行了3年,并在一家大型金融公司经过了数十位专家的测试。它具有一整套测试。但是,就像任何项目一样,我们仍然分散错误和改进。请使用github问题报告他们。

从第一天开始,RipTable就被编写为使用riptide_cpp层来处理大型数据和多线程,以用于基本的算术功能和算法。对于多线程,许多核心算法都经过精心编写。

numpy没有多线程层(我们正在与numpy团队讨论添加这样的层),它也不设计为使用C ++模板或哈希算法。熊猫没有C ++层(它改用cython),并且是其成功的受害者,这使得早期的设计错误难以更改(例如,块管理器和功能强大的分类法)。

RipTable设计用于所有大小的阵列。对于小型阵列( = 100,000),RipTable知道如何动态扩展线程,使用futex有效地唤醒线程。