开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第七阶段):Zeppelin_可视化】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/682/detail/11850
Zeppelin_可视化
内容介绍:
一、Zeppelin 的应用
二、Zeppelin 的主要功能
三、数据的可视化
前面简单介绍过了Zeppelin如何去使用以及本质上是一个什么类型的工具,也说明了BMP的项目,接下来就把Zeppelin和项目结合起来去看一下项目在 Zeppelin 如何去进行应用。
一、Zeppelin 的应用
首先去创建一个新的 zapping 的 new note,
note的名字命名为test1,接下来去把它创建出来。
创建以后在 Zeppelin 当中可以写很多这种不同的语法的,比如说Zeppelin是支持Mark down的,Zeppelin也是支持各种各样东西的,接下来把markdown的条目创建出来。
二、Zeppelin 的主要功能
Zeppelin的主要作用有两个,第一个是进行数据格式化,第二个是进行数据探索,接下来就针对这两个Zeppelin的作用来进行简单的说明,以及Zeppelin如何去使用。
然后整个Zeppelin的编译过程会稍微有一点点慢,然后去按下shift加回车以后,等待把标签编译出来。接下来进行数据的可视化。
三、数据的可视化
第一步先进行加载,在使用Zeppelin写任何一个spark程序之前,要先把Zeppelin缺少的一些依赖加载出来,加载依赖的目的是要去读取对应的kudu表,在前面写BMP项目第一个步骤的时候生成了几个报表,报表的数据是存在kudu当中了。
读取完kudu表以后就进行数据的可视化,这是接下来的一系列的步骤。
1.加载依赖
在依赖的时候要注意,Zeppelin自身提供了一些加载依赖的手段和方式,但是加载依赖的手段和方式必须要把它写在一个叫做dep的一个特殊的item内,然后可以把对应依赖的加载拷贝过来。首先依赖的加载要使用Z,Z代表的就是Zeppelin,Z有一个log的方法,log的方法会去对应的maven仓库当中把对应的maven赖加载下来。接下来按下shift+回车去读取对应的内容。
%dep
z.load( ""org-apache . kudu : kudu-client:1.7.8")
z.load( ""org.apache. kudu : kudu-spark2_2.11:1.7.0)
Must be used before SparkInterpreter (%spark) initialized
Hint: put this paragraph before any Spark code and restart Zeppelin/Interpreter
这时候系统会提示已经加载出来了,后续就可以去使用它。然后在使用依赖之前,还是先要去把对应的spark加载出来,接下来创建出来一个source字段,就要去写一些spark代码。要在spark当中读取kudu表,首先要想读取kudu表,应该先导入import org.apache . kudu. spark.kudu._
,把所有的隐式转换导入进来。
2.读取 kudu 表
读取kudu表的方式非常的简单,可以使用spark.read,spark.read
已经由Zeppelin自动提供了,是不需要主动去创建的。spark Read就得到了一个data frame reader对,读到data frame reader以后就可以继续往下去指定的option。
3.指定 option
第一个 option 需要的是 kudu 的 master,输入val source - spark.read.option( ""kudu.master"","cdhe1:7051,cdhe2:7051, cdh03:7051")
.就直接把master地址指定出来即可。
然后再给出一个option去指定一下 kudu 的 table,把kudu表加载出来,kudu 表名可以去复制一下,随便找一个 region report 的一张表,然后拿过来放在相应位置,然后接下来就使用kudu来进行相应的读取,读取以后拿到source的一个字段去show。去运行一下这段程序,可能时间会比较久。
已经把 source 里面的内容读出来了,读出来以后可以显示在相应位置,显示出来以后会发现其实并没有可视化的效果。在Zeppelin当中,把字符串以这种形式输出出来它是不可能进行可视化的,要以一种特殊的形式去写代码,才可能执行可视化。
把内容的输出符合 Zeppelin 的要求,才能够进行可视化,在 spark 当中写 sql 语句所读出来的内容是可以被 Zeppelin 所可视化的,就可以拿到source-
createOrReplaceTempViewet
,就可以写一段sql,然后把source先注册为一个叫做source.createOrReplaceTempVieve( ""report_region")
的一张表,shift加回车去执行,执行完了以后就可以写 sql 语句。在前面百分号声明条目类型的位置写上 sql,写完 sql 以后可以直接编写 SQL 会放在 spark 当中去执行。
把对应的字段写出来,输入select region, city,count from report_region
。接下来去运行 SQL 语句。SQL 语句运行完以后,会发现它已经把图表展示出来了。
展示出来图表以后,它只是以一个表的形式来去展示的,其实也可以以图的形式来进行展示。比如说可以以半 bar 图的形式来进行展示,可以点击 settings,点击setting 以后,把 value 先去掉。然后在keys位置,发现它是有一个region的,把city也拉出来,如果要想分组的话,也可以按照region和cty来进行分组,最终把count作为value,再去进行一个可视化。
如果进行分组的话,是没有数据展示的,因为分组是不对的。
展示出来的结果图表如下
group 加上以后就会变得特别卡,因为它要进行聚合对。接下来,再去重新指定一下的可视化。
刚才是进行的group,现在直接把 count 放在 value,能发现柱状图已经展示出来了
上海市是最多的对,还有河北、安徽等等,这是的柱状图的展示,也可以以饼图的形式展示出来。饼图的形式展示出来也是一样的,只需要指定 keys 和指定 values 即可,但是这一份数据集,不太适合用饼图展示。
还可以使用 area,一个类似于直方图的形式来进行展示
能注意到北京、上海内容是最多的,这就是图表的展示,可以去指定要展示的图表的类型,指定完了以后点击 settings 可以把对应的字段拖到 keys、group 和 values三个框内,它就能按照指定的规则来进行相应的展示。但是前提必须得以SQL的形式去查出来,否则数据不能被zeppelin所识别。
zeppelin 的这种展示方式介绍过来以后,除了这种展示方式以外,其实只要数据能以 zeppelin 可以认识的形式来进行展示即可,它就能把图表展示出来。也可以print ln,然后使用一种特殊的字符串的组织,比如说println( "%table region\tcity\tcount\t)
字段写完以后\T就不能再使用了可以使用换行,换完行以后可以把数据以每一行的形式组织起来,放在后面一起去输出,它也能认为是一个 table。但是这种方式就不再去运行了,比较复杂还要去处理数据,并且和前面的结果的展示和操作方式是一模一样的,没有什么特别的必要和意义,可以去用zeppelin把对应的数据从kudu当中取出来,以图表的形式展示出来。