集算器是什么?

集算器是一种程序设计语言,专注于(半)结构化数据计算与处理,提供了丰富的此类运算的类库。集算器不是面向对象的程序设计语言,没有复杂的继承和重载概念,引入对象概念仅仅是为了更方便地描述与对象相关的方法,有BASIC这类初级程序设计水平的程序员都能很快掌握。集算器是基于Java解释执行的动态语言,可以在运行过程中拼出代码执行,这样可以获得更大的灵活性,进一步降低程序设计的复杂度。

集算器定位为(半)结构化数据处理,没有直接提供统计分析、数据挖掘和机器学习等算法,也不擅长处理媒体和地图类数据。

与Java等高级语言相比,集算器中提供了大量与结构化计算相关的基础对象和方法,这类运算在数据分析处理备中很常见,因而完成同样功能的代码会比Java短得多,开发效率也自然会远高于用Java等高级语言。

举个例子, Java对一个数据集做过滤要写出几十行甚至上百行代码,如果想处理通用的数据类型和条件的话还会更长,而用集算器只要一句。

集算器对Java应用有非常好的集成性。集算器本身是用Java开发,与Java有天然的兼容性,而且集算器设计定位就是被集成,很容易被Java主应用程序调用。特别地,对于Java报表工具,用集算器为之提供数据源服务非常方便。

大家都知道,用SQL实现很零碎的多步运算很不方便,特别是与次序相关的运算,程序员常常要把数据从数据库中取出来用Java等完成。这是由于SQL的集合化不够彻底、缺乏游离记录、不提倡分步运算等原因导致的(请参见关系代数的问题与尝试(2)关联运算及描述(3)序运算与离散化)。而集算器则在这方面做了强化,实现非等值分组、分组重用、序运算及多步计算时思路更为直观。这样,集算器相当于把SQL与Java的优势统一起来,让程序员可以既可享受到类似SQL的批量集合式计算、又能获得类似Java的灵活性。

尽管集算器在大多数情况下的语法要比SQL更简单,但它并不能也不打算替代SQL。

数据从数据库读出的IO损耗较高,涉及数据量大的简单运算,数据读出的耗时远远超过运算本身,这种情况还是放在数据库中运算更合适;另外,SQL有元数据机制,其语法的透明度更好,程序员可以无须关心数据的物理存储方案,而集算器是个单纯的计算引擎,没有完善的存储机制,可以计算来自包括文件和数据库的各类数据,但内外存计算的语法不同,需要程序员分别对待。

采用集算器不意味着放弃SQL,而是在协助SQL解决不方便完成的运算,比如复杂多步运算外、多个异构数据库的混合运算等场景。

除SQL外,业界并没有通行的专门用于结构化计算的程序语言,而SQL不仅有上述的计算困难,还由于封闭性导致了使用局限性,比如无法随意地用SQL计算本地文件。因此,常有人使用python(pandas)和R等脚本语言完成此类数据处理。

python(pandas)/R的定位是数学风格的统计分析,虽然提供了dataframe对象用于处理结构化数据,但并不专业,对于外存计算则没有提供直接支持。集算器则是专业的结构化数据处理语言,提供了内存的序表对象(功能相当于dataframe的超集)以及外存的游标对象,能方便编写多线程并行计算,涉及多样性数据源(xls,json,mongodb等)时也有更简单的配置和使用方法。

相反地,集算器不擅长数学风格的统计分析,没有提供这类运算类库。

除独立分析外,结构化计算还经常在应用程序中发生,集算器有良好的Java集成性,可以方便地被Java主程序调用;而python/R等则几乎没有任何集成性可言,程序员很难写一个python算法让Java调用。

时间: 2024-10-13 06:56:16

集算器是什么?的相关文章

集算器替代存储过程实现报表数据源

存储过程是SQL语句和流程控制语句的集合,常用来把一个复杂的计算目标分解为多个简单的计算步骤.虽然以复杂性换来了灵活性,但SQL语句固有的缺点仍然体现在存储过程中,比如:分步不彻底.数据无序.缺乏集合.缺乏引用,之前我们也分析过存储过程作为报表数据源的利弊,可点击这里查看. 集算器解决了存储过程的上述缺陷,降低了对开发人员的技术要求,是存储过程理想的替代工具. 报表例子说明 某电信产品厂商有一张报表,主要目的是分析优势产品的销售额.销量.环比等指标,其中优势产品的定义是"在每个州的销量均在前10

集算器实现报表中零散的不规则计算

报表中存在的不规则计算往往给报表开发带来很大的困难,使用报表工具往往很难甚至无法直接实现.这里的不规则计算是指报表中存在特殊条件的统计项(计算),如:销售订单金额统计中计算前5名销售金额的合计和占比:学生成绩统计中总成绩排名前10的学生中语数外都超过90分的人数:用户充值统计中充值金额超过充值总额一半的用户数量等. 通过集算器可以很方便完成这类报表的开发,我们通过两个例子来了解一下具体的做法. 1.实例一 1.1 .报表描述 根据员工与订单表统计各销售人员的销售情况,并在报表中计算列出订单总额.

集算器协助java处理多样性数据源之HDFS

Java通过Hadoop提供的API访问HDFS不算困难,但针对其上文件的计算就比较麻烦.比如分组.过滤.排序等计算,用java来实现都比较复杂.集算器esproc能很好地协助java解决计算问题,同时也封装了HDFS的访问,借助esproc可以让java加强HDFS上文件的计算能力,结构化半结构化数据计算都可以轻松完成.下面我们通过例子来看一下具体作法. HDFS中的文本文件employee.gz中保存了员工数据.我们要读取员工信息,从中找出1981年1月1日(含)之后出生的女员工.文本文件在

用集算器实现跨行组计算报表

跨行组计算类报表在报表开发中非常常见,如常见的同期比.环比计算.移动平均值计算等.这类报表由于经常要引用其他行列的数据进行相对/绝对位置运算,使得报表工具在实现时并不轻松.功能相对强大的润乾报表需要借助层次坐标和位移坐标,辅以条件表达式和"$"运算符完成,书写和理解都有相当的难度. 其实通过集算器这类报表则非常容易实现,我们来看一个例子.     报表需求:根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比,样式如下: 这里应该注意的是比去年同期是指

报表工具的二次革命之集算器的作用

之前的文章已经大致给大家介绍过大数据计算引擎-润乾集算器了.想必很多人心里还是存在疑惑,集算器作为大数据分析系统,到底它能做些什么?这篇文章,就为大家详细介绍. 降低报表开发难度 降低开发难度从而提高开发效率是集算器的设计初衷,是最容易理解的作用,前面已有粗略介绍. 这方面的细节内容太多,我们会再做一个专门话题详细讲述集算器如何解决报表开发中的各种具体难题以及与常规手段的对比.在这里只做总结性地阐述. 比Java和SQL更易写 如前所述,集算器的设计目标是为了解决报表的数据准备,而目前这个工作一

集算器协助Java处理多样性数据源之Hive

Java使用jdbc连接Hive比较简单,但是Hive的计算能力相对于其它数据库的SQL而言较弱,要完成非常规的计算需要将数据取出后用Java进一步计算,编程比较麻烦. 使用集算器配合Java编程,可以减少Java使用Hive时要进行复杂计算工作量.下面我们通过例子来看一下具体作法:Hive中的orders表中保存了订单的明细数据,需要计算同期比和比上期.数据如下: ORDERID CLIENT SELLERID AMOUNT ORDERDATE    1 UJRNP 17 392 2008/1

集算器协助java处理多样性数据源之JSON

Java的json开源包一般只能解析json数据,没有运算功能.程序员自己写通用的程序来实现分组.排序.过滤.连接这些计算,相当麻烦.例如:用java写json文件条件过滤程序时,当条件表达式发生变化时就需要改写代码.如果要实现象SQL那样灵活的条件过滤,则需要自己实现动态表达式解析和求值,编程工作量非常大. 集算器是支持动态表达式的,可以嵌入到Java中写出通用的json计算程序.下面我们通过例子来看一下具体作法.待处理字符串是json格式的员工信息,包含EID.NAME.SURNAME.GE

集算器简化SQL式计算之组内运算

在开发数据库应用时,经常会遇到分组后针对组内数据的运算问题,如:列出近3年每年都发表过论文的学生名单,统计全部参加了历次培训的员工,选出每位客户的高尔夫成绩最高的三天等等.SQL完成这类运算较为复杂,一般需要嵌套多层,导致代码难以理解和维护.而集算器擅长表达这类组内计算,且很容易和JAVA或报表工具集成.下面用一个例子来说明. 根据数据库表SaleData统计出2013年中,每个月销售金额均排在前20名的客户名称.SalesData的部分数据如下: 想解决这个问题,需要选出2013年的销售数据,

集算器调用数据库存储过程的代码示例

集算器可以方便的调用数据库的存储过程,这里通过例子来看一下具体的程序写法. 调用无返回值的存储过程 用oracle的存储过程为例,存储过程只有一个输入参数,没有输出参数: create orreplace procedure pro1 (pid IN VARCHAR) as begin insert into emp values(pid,'mike'); update emp set name='rose' where id=pid; commit; end; 在集算器中可以使用execute

用集算器实现跨数据库关联报表

实际应用中很多报表的数据来源于多个不同类型的数据库,报表数据源跨数据库是报表开发中的常态.目前实现这类跨库关联报表的方式有多种,但都会存在这样那样的问题. 使用报表工具自身多源关联功能 现在大多数主流报表工具都支持多数据源关联,这在某些方面确实为报表用户带来了便利.然而我们也经常会遇到通过报表自身的多源关联功能很难实现一些跨库关联的报表(由于数据结构和业务本身决定).这当然容易理解,报表工具主要是来做数据展现的,而对数据计算本身来说并不擅长. 即使有的能实现,在报表中做跨库关联计算的效率也较低,