欢迎来到天天文库
浏览记录
ID:52238927
大小:344.93 KB
页数:2页
时间:2020-03-25
《在Hadoop上用集算器进行敏捷语法编程-续.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在Hadoop上用集算器进行敏捷语法编程-续上次分享了用集算器的敏捷语法来编写Hadoop代码的一些经验。本文是对上次的补充和深入。首先说网格代码。上次讲了网格代码可以方便地定义变量、引用变量、进行多步的复杂计算。实际上,网格还可以使计算结果的复用变得简单,请看下面这段代码:可以看到A2的计算结果在B2和A3中被复用了。网格中的格线也是个不错的主意。它可以使代码自然对齐,比如通过缩进形成直观的作用范围。比如下面这段代码:BranchoneBranchtwo看上去不错,判断语句的分支很好识别。不必刻意编辑就可以使代码清晰工整。再说一下对象引用
2、。什么是对象引用?上次代码中有这一段:A10:=A9.sort(sumAmount:-1).select(#<=10),A10的代码其实可以分写在两个单元格中,一个进行排序,另一个进行过滤。但在实际的代码中我是用“.”来连接这两步运算的,这就是对象引用。它可以显著减少代码的书写量,使代码编写更加敏捷。SQL直写大数据计算常会访问Hive数据库或传统数据库,MapReduce需要书写麻烦的connectstatementresult语句,而集算器支持SQL直写,省去了这些麻烦。例如,从数据源名为HData的Hive数据库取得销售记录,在集
3、算器中只需一句:$(HData)select*fromsales。函数选项首先看上次代码中的这两句:节点机代码A2:=A1.groups(${gruopField};${method}(${sumField}):Amount)汇总机代码A9:=A8.groups@o(${gruopField};${method}(Amount):sumAmount)前者直接使用groups,以便对未排序的数据进行分组。后者使用了@o选项,表示对已排序的数据进行分组,这样速度更快。@o就是个函数选项,它可以减少复杂的重载函数,使不同功能的函数更容易记忆。
4、除了@o,groups还有@m和@n等函数选项。函数选项是个不错的设计,可以是使函数结构更加简单,代码编写更加敏捷。多层参数多层参数(或叫层次参数)也可以使语法更加敏捷,这是表示函数中不同层级参数的一种方式,比如给员工按绩效分数划分级别:绩效大于90,定为“A”绩效在90到60之间,定为“B”绩效在60到30之间,定为“C”绩效在30以下,定为“D”在集算器中,上述参数可以敏捷地表达为:score>90:"A",score>60&&score<90:"B",score>30&&score<=60:"C";"D"这里的参数分为三层,最
5、外层:分支和缺省分支,用“;”来分隔;中间层:每个分支用“,”来分隔;最内层:每个分支中的判断表达式和判断结果用“:”来分隔。这是个三层树形结构的参数组合。集合式分组集算器支持集合式分组,同样可以敏捷地编写代码。动态数据类型本质是集合,即简单数据类型是单值集合,数组是同类数据的集合,二维表是记录的集合。集合的成员也可以是另一个集合,因此集算器可以直观地表示数据计算中分组的概念:每一组是集合的一个成员,成员本身也是一个集合。集合式分组可以用敏捷的语法解决复杂的分组计算问题。比如找出签订保单数最多和最少的销售员,代码如下:A1格:按销售员分组。
6、每组是一个销售员全部的保单集合。A2格:把组按保单数量排序。这里的”~”即每个销售员对应的那一组保单。A3格:求最多和最少的保单在哪两个组。即A2格中第一位和倒数第一位的组。A4格:列出销售员名。即A3中两组保单对应的销售员。集算器的敏捷语法使代码开发更加高效,可以显著减少开发工作量。
此文档下载收益归作者所有