在不创建中间对象的情况下对列数据执行高速计算。

oamap的Python项目详细描述


https://travis-ci.org/diana-hep/oamap.svg?branch=master

简介

数据分析员经常面临速度和灵活性之间的选择。对于真正的交互式分析会话,可以足够快速地处理表格式数据(如sql表),但层次嵌套格式(如json)更擅长在复杂的数据模型中表示关系。在某些领域(如粒子物理),我们希望以sql的速度对类json结构执行计算。

在大型数据集上实现高吞吐量的关键是在“列”中布局数据,特别是那些具有比单次访问更多属性的数据集。属性的所有值都应该在磁盘或内存上连续,因为数据在本地连续块中从一个缓存分页到下一个缓存。ROOTParquet文件格式表示磁盘列中类似json的数据,但这些数据通常反序列化为对象,以便在内存中处理。通过在计算的所有阶段(参见this talkthis paper)保持柱状结构,可以获得更高的性能。

oamap工具包在python中实现了一个对象数组映射。与对象关系映射(orms)类似,对象数组映射是概念对象和物理数组之间的一对一关系。您可以编写看似在普通python对象(列表、元组、类实例)上运行,但实际上在低级别连续缓冲区(numpy数组)上运行的函数。其结果是快速处理具有低内存占用的大型复杂数据集。

OAMap有两种主要模式:(1)纯Python对象代理,它假装为Python对象,实际上按需访问数组数据,(2)由^ {A6}编译的裸金属字节码。纯python表单适合于低延迟、探索性工作,而编译的表单适合于高吞吐量。它们可以无缝地互换:python代理在进入numba编译函数时转换为编译后的形式,在离开时切换回原来的形式。例如,您可以在编译后的代码中进行快速搜索,并手动更全面地检查结果。

任何列文件格式或数据库都可以用作数据源:oamap可以从任何dict类对象(实现__getitem__的任何python对象)获取数据数组,甚至可以从numba编译函数中获取。包括根、拼花和hdf5的后端,以及pythonshelve替代方案。存储和访问一个完整的数据集(包括元数据)只需要一个命名数组的集合。(数据类型以名称和数组中的值进行编码。)OAMAP旨在用作文件格式和数据库之上的中间件层,但位于完全集成的分析套件之下。

安装

像任何其他python包一样安装oamap:

pip install oamap --user

或类似的(如果愿意,可以使用sudovirtualenvconda)。

严格依赖项:

推荐依赖项:

  • Numba and LLVM到jit编译函数(需要特定版本的llvm,请遵循说明)
  • thriftpy读取拼花文件(纯python,pip很好)
  • uproot读取根文件(纯python,pip很好)
  • h5py读取hdf5文件(需要二进制库;遵循说明)

可选依赖项:(都是绑定到可以安装包的二进制文件)

  • lz4一些根文件和拼花文件使用的压缩
  • python-snappy一些拼花文件使用的压缩
  • lzo一些拼花文件使用的压缩
  • brotli一些拼花文件使用的压缩

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android测试运行失败:没有测试结果   java设置JMenuItems与Nimbus LaF的边界   java是使用springboot、Crudepository和MySQL检查重复值的好方法吗   谷歌电子表格的Java时代日期   java向xml文件添加EditText不起作用   java ORA00933:SQL命令未正确结束WHERE子句   如何在java中防止JTextField上使用CTRL+C?   java绑定到TypeLiteral在google guice中是好的还是坏的做法   java找到了原始类型,缺少泛型类的返回参数   Kafka Streams API中ArrayList Serde的java问题   java在hibernate中,哪种持久化上下文的性能更好?   java通过本机查询获取数据库url、名称和模式版本   如何为Java枚举编写通用for循环?   在Java应用程序中播放MP3   如何使用VisualVM度量短时间运行的Java应用程序的性能?   java从当前日期获取datetime(秒)   简单JMH基准中的javagrpcoome和NPE   java如何加载Maven项目库中Spring jar的应用程序上下文   JavaCC XPath解析器   用于Scala和Java的类型安全生成器库