报表统计_数据的区域分布_环境准备 | 学习笔记

简介: 快速学习报表统计_数据的区域分布_环境准备

开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第五阶段)报表统计_数据的区域分布_环境准备】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/680/detail/11814


报表统计_数据的区域分布_环境准备

 

内容介绍:

一、报表生成

二、按照地域统计数据集的分布情况

 

一、报表生成

1、进行报表相关的开发,报表开发当中有很多张报表需要做。

image.png

为什么需要进行报表开发?下面进行简单的说明。做报表生成的目的是一般的系统需要使用报表来展示公司的运营情况,展示公司的数据情况,这个章节对数据进行一些常见的报表开发,通过这个章节,会了解常见的报表应该怎样处理。

2、在本章节中,有六个报表需要做,中间再加一个额外的步骤,总共是七个步骤。第一个步骤,要生成数据集的地域分布报表数据,第二个步骤,是生成广告投放的地域分布报表数据,接下来是广告投放的 APP分布、广告投放的设备分布、广告投放的网络类型分布、广告投放的网络运营商分布、广告投放的渠道分布等等。下面进行更详细的了解,中间会穿插一个小的章节,来对整个环境,整个架构进行更详细的梳理。

3、目标

一般的系统需要使用报表来展示公司的运营情况,数据情况,这个章节对数据进行一些常见报表的开发

4、步骤

生成数据集的地域分布报表数据

生成广告投放的地域分布报表数据

生成广告投放的 APP 分布报表数据

生成广告投放的设备分布报表数据

生成广告投放的网络类型分布报表数据

生成广告投放的网络运营商分布报表数据

生成广告投放的渠道分布报表数据

 

二、按照地域统计数据集的分布情况

1、目标

按照地域统计数据集的分布情况,看到不同的地区有多少数据,从而能够根据地区优化公司运营策略

按照地域统计数据集的分布情况,这句话当中有两个重点,第一个重点是地域,按照地域来进行统计,统计数据集的分布情况,这两个单词要理解,什么叫地域统计?统计什么?统计数据集的分布情况。换句说法,就是要统计数据集在地域中的分布情况。比如说北京有多少条数据,上海有多少条数据,广州有多少条数据,这就叫做数据集的地域分布情况。这一章节的目标是按照地域统计数据集的分布情况,看到不同的地区有多少数据,从而能够根据地区优化公司运营策略。比如说,按照区域统计数据以后,就能看到全国哪些区域数据很少。所以需要着重增加这些区域的相关数据,或者说,有一些区域特别好,要把区域维护好,这就是我们的目标。

2、步骤

需求分析,从结果看过程;代码编写

第一步,进行需求分析,从结果看处理的过程,第二步要进行相应的代码的编写。

3、需求分析

(1)结果表

报表生成其实就通过现有的数据,先进行统计,后生成报表,然后落地到 Kudu 中

image.png

想要理解报表怎样做,先看结果是什么,如上图结果图片。

第一列是 region,第二列是 city,第三列是数据的个数。第一行的含义是云南省昆明市有八条数据,第二条数据的含义是内蒙古省呼和浩特市有七条数据,第三条数据是内蒙古赤峰市有两条数据。原始的数据集都已经非常清楚明白是什么数据了,接下来,该如何按照 region 和 city 统计数据?怎样得到这样一个结果集?

在结果集当中有三个字段,省、市和数据量,含义就是想看到所有的省市分别有多少数据。

(2)处理过程

读取 ODS 数据

按照省市分组

统计数量

落地 Kudu

第一步要读取 ods 数据,第二步要按照省市进行分组,既然要统计省市对应的数据量,就应该按照省和市先分组,分完组以后直接求 count,就能得到每一组的数量。先分组,后统计,最后落地到 Kudo 中。

 

4、代码编写

(1)创建文件com. itheima. Dmp. report.RegionReport

Processor

(2)代码编写

object RegionReportProcessor {

def main(args:Array[String]):Unit={

import com. itheima. dmp. utils.SparkConfigHelper._

import com. itheima. dmp. utils.KuduHelper._

import org. apache. spark. sql. functions._

val spark=SparkSession. builder()

. master("local[6]")

.appName("pmt_etl")

.loadConfig()

-getOrCreate()

import spark. implicits.

val origin=spark.readKuduTable(ORIGIN_TABLE_NAME)

if(origin.isEmpty) return

val result=origin. get.groupBy($"region",$"city").

.agg(count($"*") as "count")

. select($"region",$"city",$"count")

result.createKuduTable(TARGET_TABLE_NAME, schema, keys)

result.saveToKudu(TARGET_TABLE_NAME) 5

}

private val ORIGIN_TABLE_NAME=PmtETLRunner.ODS_TABLE _NAME

private val TARGET_TABLE_NAME="ANALYSIS_REGION _"+

KuduHelper. formatted Date()

import scala. collection.JavaConverters._

private val schema=new Schema(List(

new ColumnSchemaBuilder("region",

Type.STRING). nullable(false). key(true). build,

new ColumnSchemaBuilder("city",

Type.STRING). nullable(true). key(true). build(),

new ColumnSchemaBuilder("count",

Type.STRING). nullable(true). key(false). build()

) .asJava

代码编写首先需要创建一个文件,文件建在 report 的包下,叫做 RegionReportProcesson,直接进行代码编写。先去创建一个文件,文件创建在 report 下,文件名称叫做 RegionAnalysis。RegionAnalysis 当中要把它改为 object,改为 object 以后把 main 方法写出来。步骤先简单梳理一下,第一步创建 SparkSession,第二步读取 ods 层的数据,第三步按照省市进行分组求得结果,第四步落地到 Report 表中,这就是整个的四大步骤,下面一步一步去实现它。在这之前先改一下 RegionAnalysis 的类名,修改为 RegionReportProcessor。整个的流程总结一下,就是从 ods 层取出数据进行处理,就是分组统计,接下来再落地到 report 表当中,这个时候 ods 在 Kudo 中,report 也在 Kudo 中。这样,整个过程特别明确,要先有原表的表名,不知道原表的表名叫什么该怎么办?原表的表名在 ETL 当中落地,打开 ETL,找到 ETLRunner,runner 当中有原表,看 structure,

image.png

找到 TARGET_TABLE_NAME,TARGET_TABLE_NAME 就是 ODS 层的表名,修改一下之前的命名,之前是 TARGET_TABLE_NAME,改为 ODS_TABLE_NAME,这样比较容易让外部理解。改完名以后把private 去掉,这个时候就可以访问。一般提供给外部访问的字段,可以在后面主动注明他的类型,这是为了安全起见。

//4.数据落地

Spark.createKuduTable(ODS_TABLE_NAME,schema,keys)

Result.saveTokudu(ODS_TABLE_NAME)

}

val ODS_TABLE_NAME:string =’ODS_” + KuduHelpe.formattedDate()

这个时候就可以从 ETLRunner 当中取到 ods 层的表名。回到 RegionReportProcessor 中,把其它窗口关闭。先命一个名,叫做 SOURCE_TABLE_NAME,SOURCE_TABLE_NAME 叫做 ETLRunner 当中的 ODS_TABLE_NAME,这个时候就已经把原表的表名处理好了。接下来 , TARGET_TABLE_NAME 可以命名为 report_data_region,在后面加上今天的日期,加上日期是一个比较好的习惯。Report 这张表也会按照一定的周期生成,要统计每日数据的话,就要在后面追加上日期。KudoHelper.formatted 追加日期,这个时候,原表的表名和目标的表明就完成了。然后去做刚才的四个步骤,第一步直接拿 spark,然后 SparkSession.builder,builder 以后设置 appName,appName 命名为 report ,master 给定为 local【6】,接下来 getOrCreat, getOrCreat 之前 loadConfig,但是没有这个方法,所以导入隐式转换

import cn. itcast. utils.SparkConfigHelper._

import cn. itcast. utils.KuduHelper._

就可以读取 ods 层的数据,使用 spark.readKudoTable, 要指定 tablename,指定为 SOURCE_TABLE_NAME。指定完以后就获取到了 source data frame,获取到 source data frame 以后,看一下 source 是什么类型?他是一个 option 类型,因为 readkudotable 当中有可能没有这张表,没有这张表,自然不能访问数据。所以就应该给一个 option 让外部知道这个地方可能没有数据,然后在外部进行一些相应的判断。做一个简单的判断,这个判断就是当 source 里面没有数据的话 isEmpty,如果 isEmpty 的话,return 就是后面的代码就不执行。因为没有 ods 层的表,没有办法进行报表统计。把表名和环境准备好,下面再进行具体的数据统计。

object RegionReportProcessor {

/**

*Kudu.ODS->分组统计->Kudu. Report

*/

def main(args:Array[String]):Unit={

import cn. itcast. utils.SparkConfigHelper.

import cn. itcast. utils.KuduHelper.

//1.创建 SparkSession

val spark=SparkSession. builder()

.appName(name="report data region")

. master(master="local[6]")

.loadConfig()

·getOrCreate()

//2.读取 ODS 层数据

val source:Option[Data Frame]=spark.readKuduTable(SOURCE_

TABLE_NAME)

if (source.isEmpty) return

//3.按照省市进行分组求得结果

//4.落地到 Report 表中

}

private val SOURCE_TABLE_NAME=ETLRunner.ODS_TABLE_

NAME

private val TARGET_TABLE_NAWE="report_data_region _"+

KuduHelper. formatted Date()

相关文章
ArcMap矢量图层的零碎、空洞区域填补与独立区域剔除:消除面部件
本文介绍在ArcMap软件中,基于消除面部件(“Eliminate Polygon Part”)工具,对矢量面要素的零碎、空洞区域加以删除,同时将游离于要素主体之外的部分剔除的方法~
112538 1
ArcMap矢量图层的零碎、空洞区域填补与独立区域剔除:消除面部件
|
3月前
|
Rust 监控 算法
基于circom、snarkjs实现零知识证明不透漏具体地理位置的区域监控
文章介绍了如何使用circom和snarkjs工具基于零知识证明算法Groth16实现不泄露具体地理位置的区域监控系统,详细说明了开发环境搭建、电路设计、计算和证明过程,并提供了相应的命令和代码示例。
51 0
|
5月前
|
数据可视化 SDN Python
复动力系统 | 混沌 | Lozi 映射吸引子的可视化与交互式探索
该文介绍了一篇关于Lozi映射吸引子可视化和交互式探索的文章。Lozi映射是混沌理论中的一个模型,展示非线性动力系统的复杂性。通过Python和matplotlib,作者实现了Lozi映射的可视化,并添加交互功能,允许用户缩放以详细观察混沌吸引子。文中还给出了Lozi映射的数学定义,并提供了Python代码示例,演示如何绘制和动态调整吸引子的显示。
|
存储 SQL 前端开发
GIS跟踪监管系统单元信息更新
GIS跟踪监管系统单元信息更新
60 0
ArcGIS:如何通过欧氏距离分析、重分类等工具对学校选址问题进行分析
ArcGIS:如何通过欧氏距离分析、重分类等工具对学校选址问题进行分析
353 0
|
算法 网络协议 测试技术
能力迁移:找到自己的第二曲线
其实并不是反对用新技术比如自动化来提升工作效率,解决重复问题,而是在现实和理想之间要学会取舍。
能力迁移:找到自己的第二曲线
|
分布式计算 Java BI
报表统计_数据的区域分布_代码开发 | 学习笔记
快速学习报表统计_数据的区域分布_代码开发
139 0
报表统计_数据的区域分布_代码开发 | 学习笔记
|
Web App开发 安全
绝密追踪:利用像素图片收集攻击目标信息
本文讲的是绝密追踪:利用像素图片收集攻击目标信息,网络犯罪团伙正在滥用一种常见的邮件营销手段。通过名为“像素图片追踪”(pixel tracking)的技术,他们可以收集攻击目标的网络信息提高钓鱼攻击效率。
2183 0
|
编解码 区块链
Google Earth Engine——WWF河流流量累积数据集定义了排入每个单元的上游区域的数量(以单元数计)。排水方向层被用来定义哪些小区流入目标小区。累积单元的数量本质上是对上游集水区的测量。
Google Earth Engine——WWF河流流量累积数据集定义了排入每个单元的上游区域的数量(以单元数计)。排水方向层被用来定义哪些小区流入目标小区。累积单元的数量本质上是对上游集水区的测量。
132 0
Google Earth Engine——WWF河流流量累积数据集定义了排入每个单元的上游区域的数量(以单元数计)。排水方向层被用来定义哪些小区流入目标小区。累积单元的数量本质上是对上游集水区的测量。
|
传感器 定位技术 ice
Google Earth Engine——该数据集是美国宇航局在研究环境中使用地球系统数据记录 (MEaSUREs) 计划的一部分,包括选定冰川出口区域的月平均速度图
Google Earth Engine——该数据集是美国宇航局在研究环境中使用地球系统数据记录 (MEaSUREs) 计划的一部分,包括选定冰川出口区域的月平均速度图
141 0
Google Earth Engine——该数据集是美国宇航局在研究环境中使用地球系统数据记录 (MEaSUREs) 计划的一部分,包括选定冰川出口区域的月平均速度图
下一篇
无影云桌面