前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Scala的强大api快速加工数据

使用Scala的强大api快速加工数据

作者头像
我是攻城师
发布2018-05-14 17:29:12
9310
发布2018-05-14 17:29:12
举报
文章被收录于专栏:我是攻城师

Scala是一门高级的,非常灵活和强大的函数式编程语言,既支持类型严格,语义明确的面向对象的编程风格,也支持类型多变,写法风骚的函数式编码。

Scala中封装了许多有用强大的api,使我们处理数据更加方便,当然Java8以后也支持了一些函数式编程的写法的语法糖,终于能使雍容的java代码精简不少,有名的开源框架如Spark,Kafka,Filnk也都是使用Scala编写的,感兴趣的朋友可以学习一下。

今天来看一个使用Scala处理集合数据的一个小案例:

先看几条例子数据:

需求就是将如上强势开黑英雄阵容的数据按班级分类,然后每个班级下面可快速通过英雄id(唯一)查询到该英雄,其实思路很明确,只要加工成一个2级map的结构即可,如下:

我们先看下,造的数据源的几行代码:

上面的代码首先定义了一个case类,并重写了其tostring方法,紧接着又构建了一套开黑阵容的英雄的数据,最终将其放在一个数组中,下面看下核心的处理方法:

上面的代码就是加工的核心代码,其实只有后面两行才是最核心的,第一行我们首先定义了一个最终的存储结构,然后接着我们对数组进行分组,得到了一个初步的按班级分组的map结构的数据,但是这个map并不是我们想要的,因为它仅仅了提供了班级的映射的数据,如果我们将获取某个班级下的某个英雄的数据,还得遍历整个班级的数据才能找到,所以我们又在第三步对班级的数据做了一个转化,将其原来是Array[Hero]的数据结构,转成了Map[String,Hero]结构,通过Hash表的数据结果,我们能快速定位某个英雄的数据。

下面分析下第三段代码的意思,第二段代码其实比较容易理解就是对数组元素进行按班级分组,返回的结果就是每一个班级,对应一个班级的集合数据,第三段代码核心是下面的这一句:

前面的+=是追加数据到map集合里面,后面的代码其实里面隐藏了一个个匿名函数:

scala里面的map方法的参数是一个函数,首先我们通过map方法,遍历Array[Hero]里面的每一个英雄的数据,然后通过上面代码的这个匿名函数,将生成一个Iterator[(k,v)]数据结构,最终调用toMap方法,将这个集合数据转化成map即可。

在scala里面Map里面一个集合的元素,表示如下:

所以,下面的代码其实就是最终结果的存储的一个kv对内容:

最后我们来打印下,结果集的数据:

输出结果如下:

看到结果是没问题的,scala里面提供了非常多的这点常见的功能强大的api,这一点搞过spark开发的人应该都有体会,里面关于rdd操作的众多方法都与scala的原生的api非常功能非常类似,用起来非常方便。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档