bcolz的查询和聚合框架

bquer的Python项目详细描述


b查询
==

![bquery logo](bquery.png)

bquery是BCOLZ的一个查询和聚合框架,可以在任何硬件(从笔记本电脑到集群)上进行非常快速但不核心的大数据聚合。bquery在生产环境中用于处理对数百个文件的报告和数据检索查询,每个文件可以包含数十亿条记录。


bquery框架提供了在bcolz容器上执行查询和聚合操作的方法,并通过预处理可能的groupby列来加速这些操作。目前,使用磁盘bcolz查询的sum聚合的实际性能通常比类似的内存pandas聚合慢1.5到3.0倍。请参阅下面的基准测试段落。

请务必注意,虽然最终结果是bcolz ctable(可能是内核外的),并且输入可以是任何内核外的ctable,但中间结果将是内存中的numpy数组。这是因为在非排序表上的大多数groupby操作需要随机内存访问,而bcolz仅限于顺序访问以获得最佳性能。但是,此内存占用仅限于groupby结果长度,将来可以进一步优化为每列使用量。

在未来,
其他计划的改进是进一步改进查询的每列并行执行,并使用in/not-in功能扩展numexpr,以进一步加快高级过滤速度。

尽管这项技术刚刚起步,但它本身是可靠和稳定的,尽管深度仍然有限功能性。visualfabriq使用bcolz和bquery为我们的客户可靠地处理数十亿条记录,并使用实时报告和机器学习。

bquery需要bcolz。我们也非常鼓励用户安装numexpr。

那些。首先要有一个ctable(如果没有可用的文件,请参阅"bench\u groupby.py"文件作为示例。

import bquery
y with aggregation易于执行:

ctable.groupby(list_of_groupby_columns,agg_list)

`agg_list'包含聚合操作,聚合操作可以是:
*列的直接列表(对每个列执行总和并存储在同名列中)
-`[‘m1’,‘m2’,…]`
-一个列表列表,其中每个列表提供输入列名和操作)
-`[['m1','sum'],['m2','count'],…]`
-一个列表列表,其中每个列表还包括一个输出列名
-`[['m1','sum','m1',['m1','count','m1',…]`




*`sum`
*`mean`算术平均数(平均值)
*`std`标准差
*`count`
*`count `
*`count `
*`count `
*`count `
*`count `










按第f0列分组,按第f0列对第2列求和,按第f0列对第f0列对第f2列求和,按第f0列对第f0列进行分组,按第f0列对第f0列对第f2列进行和,出局将具有相同名称的列放入
ct.groupby(['f0',['f2'])

groupby column f0,对列f2执行计数
ct.groupby(['f0',[['f2','count']])

#groupby列f0,在f2上有一个和(输出到"f2总和"),在f2上有一个平均值(输出到"f2总和")
ct.groupby(['f0',['f2','sum','f2总和',['f2','mean','f2均值')



对groupby列的eparing分解:

ctable.cache\u factor(所有可能的groupby列的列表)

f0列的cache分解以加速f0列上的未来groupby
ct.cache\u factor(['f0'])

小精灵。这尚未自动触发。

building&installing
---------


clone bquery来构建和安装它

````
git clone https://github.com/visualfabriq/bquery.git
cd bquery
python setup.py build-ext--inplace
python setup.py install
```

testing
----
``` noests bquery```

benchmark 1:与cytoolz和pandas的比较
----
执行ting

注意:在这种情况下,ctable在磁盘存储上,而pandas在内存中

````
groupby在列f0上
在列f2上的聚合结果
行:1000000

ctable((1000000,),[('f0,'s2'),('f1,'s2'),('f2,'<;i8'),('f3,'<;i8')]
nbyte19.07兆字节:19.07兆字节:1.14兆字节;比率:16.70
cprams:=cprams(clevel=5,shuffle=true,cname='blosclz')
rootdir:='/var/folders/zghyy/zghg75d13d65nd9 d7x8llr00000gn/t/bcolz-lal2hn'
[('es,'es,'b1',1,,-1,('nl,'b1','1,'1,'1,'1,'1,'1,'1,'1,'1,'1,'1,'1,'2,'2,'2,'2,'es,'b3 2)('ES','B4',1('nl,'b5,'b5,'2,,-2)]




大熊猫:0.0827秒
f0
es 500000
nl 1000000
n l 1000000
name:f2,dtyp类型:int64




>1.8612秒
x22.5比大熊猫慢

{nl:1000000,'es:500000}





>br/>br/>br/>0.2983秒
x33
x3 x3 x3 61斯洛r比熊猫
f0和
0 es 500000
1 nl 1000000



b对bcolz的查询:0.1833秒
x2.22比熊猫
[('es',500000)('nl',1000000)]



b对bcolz的查询(已缓存因子分解):0.1302秒
x1.57比熊猫
[('es',500000)慢('nl',1000000)]
```
有关这些结果的详细信息,请参见python脚本

------
请参见https://github.com/visualfabriq/bquery/blob/master/bquery/benchmarks/taxi/taxi%20set.ipynb


性能(vbench)
----
运行vbench套件```

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

推荐PyPI第三方库


热门话题
文本中的java JFX图像   堆栈快速java问题   Web服务上的java设置超时   找不到java Jersey MessageBodyReader   尝试运行TestNG类时,Eclipse中线程“main”中出现java异常错误   java Wakelock只工作一次   多线程Java同步和线程   java日期解析操作使服务器崩溃   在Bluemix中启动应用程序时,java无法创建PoolableConnectionFactory错误   java包装是否超出了可用空间中组合框的内容?   java安卓游戏时间处理   根据Java,spring是线程安全的方法   正则表达式如何使用java查找中间有空格的数字的正则表达式模式   java使用数组作为自定义通用哈希表中的表来存储条目   java中缀到后缀求值   java类型安全:Map[]类型的表达式需要未经检查的转换才能符合Map<String,Object>[]   java Jama矩阵printwriter错误   java在使用GridLayout创建战舰程序时遇到问题