商圈库_功能_思路 | 学习笔记

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 快速学习商圈库_功能_思路。

开发者学堂课程【2020版大数据实战项目之DMP广告系统(第六阶段)商圈库_功能_思路】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/681/detail/11831


商圈库_功能_思路

 

内容介绍:

一. 数据计算平台:批量计算,流计算

二. 生成功能表的目的和原因

三. 功能的含义

四. 数据的处理方式

五. 高德api的查询

 

一.数据计算平台:批量计算,流计算

1.数据处理的思路呢?

首先整个的数据计算平台大概有两种,第一种是批量计算,第二种是流计算。批量计算是一批一批的计算,而流计算是一个一个的计算。现在这个场景是批量计算。商圈库是要保留所有的这个经纬度对应的商圈信息,也就是最终的商圈库所生成的这个表,应该是这种形式的。

首先有一个 Key,这个 Key,可以对应的是一个 location 信息,或者就定义为 geo。这个geo对应第一个列,第二个列应该对应一个商圈信息,那就是area信息,最终的这个表当中可以只有两个内容,一个是 geo 也就是地理位置,还有一个 area 是商圈的名字。

 

二.生成功能表的目的和原因

接下来要思考的一件事情就是,如果要生成 geo.area 这样的一张表,那为什么要生成这张表?生成这张表的意义何在?

先复制 private val AREA_TABLE_NAME=BUSINESS_AREA’’这个注释,写到类上。

做这个功能最终的结果为:geo,area  ,这样的一张表有两列,那要做这个功能的目的是什么?为什么要做这个功能?

如果不做这个表,在生成标签时,因为这个商圈库是为标签服务提供的,既然它是为标签提供服务的,那么在生成标签的时候要为某一条数据生成一个叫做商圈的标签,所以就要在每一条数据生成标签的时候都要去访问一下高德。

 

三.功能的含义

这个高德的api不是一直能用的,每天是有使用次数的。所以就可能会出现失败的情况。接下来就可以再针对数据来进行一次处理,获取其商圈信息,缓存下来,这个缓存就是商圈表。其实要做这个商圈库,只是把这个商圈的信息挪到本地而已,如果不做这个功能也可以从高德里面拿到,在生成标签时拿到就行。

但是每一次生成标签的时候都去拿,高德会限制不会让一直查,它是有次数限制的,查多了就不让再查了。

这个功能最核心的一点就是按照经纬度的范围,作为 key,商圈信息作为 value,生成一张表。

也就是在这个范围内的所有的经纬度,对应的都是这个商圈。这样就可以提高命中率。从而就不需要每一次都去查高德,查的多了基本上就有整个高德的数据库。所以就可以节省网络资源,速度相对来说也会更快一些,这是这个功能的含义。

 

四.数据的处理方式

这个功能简单介绍一下,有两种数据的处理方式,对于商圈标签生成时数据可能是流式的,也可能是批样的处理。

如果是流式,那么就是来一条数据就去查询一下商圈信息,那如果是批式,就是来一批就去查询商圈信息,并统一进行计算。

最终目的不能每一次都去读取全量的数据生成标签,应该尽量的减少查询高德api的次数。那怎么去做到减少查询高德的 api 的次数呢?这个办法也是比较简单的。先读取 O D S 层的数据,生成每条数据所在的地理位置的范围。其实也就是表中的 key

读取完 O D S 层的数据以后再和商圈库做一次相应的剪辑。假如说这个 key 已经存在了,那么就没有必要再去查询高德的 api 了。就和商圈库做一次差集,如果数据key存在则去掉这条数据,再进行高德 api 的查询。虽然说起来容易,但是其实并没有那么好做。

 

五.高德api的查询

接下来就可以再去读取一张表,这张表就读取已经生成的area,这是已经生成的商圈库,还要再读取出来,那么整条代码就是:

val areaOption=spark. read kuduTable (AREA_TABLE_NAME), (AREA_TABLE_NAME

If(sourceceOption.isEmpty)return这一行代码删除,就有以下两个代码:

val areaOption=spark. read kuduTable (AREA_TABLE_NAME)

Val soureOption=spark. read kuduTable(ODS_TABLE_NAME)

 

这两个代码都是Option,那这个area有可能是不存在的,所以就可以去判断,因为这个代码不分source,所以当这个代码出现

if odsOption.isDefined, 说明ods表已经存在了,并且整个代码:if odsOption.isDefined && areaoption isEmpty,也就是说明不存在area商圈库的这张表,那么这就是一种处理逻辑。

走到这里说明这个ods表是存在的,但是商圈表不存在,就意味着在这个分支中,不需要进行差集。

那么代码 else if(odsoption.isDefined&& areaOption). isDefined  肯定也是存在的,并且这个 option 也是存在的,那么两个东西都存在。其实不要 else 也是一样,都做一个全量的判断,假如说这个 odsoption 是存在的,但是这个 area option 不存在,商圈和ods 两张表都存在。

这里说明 ods 表是存在的,商圈表也存在,这时就说明要先进行差集,去掉已有的数据,再查询高德Api。这就是一个大致的逻辑。这个逻辑还是稍微有一点绕,虽然绕但还是有必要这样去做。这就是最终的结果。

接下来就可以在外部去给定一个结果,这个结果就是一个 result,这个 result 暂且可能为空。它是一个 data frame 的类型,到最后判断 data frame 是否存在,将它Import 一下。到最后数据落地时,判断一下 result,如果它不等于空,就进行相应的落地。走到这里,说明数据至少处理过了,所以可以进行落地。

这就是大致的逻辑,再梳理一遍,梳理一遍以后,给一个 nul l,就可以进行后续的编写了。如下图所示:

1.png

 

当然这个逻辑是比较复杂的,虽然没有标签生成逻辑那么绕,但是稍微有一点复杂,那么这个章节就先暂时告一段落。

相关文章
|
消息中间件 存储 NoSQL
离线与实时数据开发方案
离线与实时数据开发方案
296 0
|
16天前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
消息中间件 关系型数据库 Kafka
Flink CDC可以从Kafka消费数据并写入到Doris中
Flink CDC可以从Kafka消费数据并写入到Doris中
858 2
|
Java
jdk 8 使用okhttp3 实现 http2
使用jdk8 使用okhttp3 实现http2请求
3964 0
jdk 8 使用okhttp3 实现 http2
|
SQL 分布式计算 Hadoop
hadoop数据查询和分析
【5月更文挑战第9天】
490 1
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
276 1
|
11月前
|
存储 JSON 监控
微服务链路追踪原理,一文搞懂!
本文重点讲解微服务链路追踪(Microservices Distributed Tracing),介绍其原理、架构及工作流程。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
微服务链路追踪原理,一文搞懂!
|
11月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
584 2
|
机器学习/深度学习 人工智能 Apache
人工智能平台PAI操作报错合集之alink任务可以在本地运行,上传到flink web运行就报错,如何解决
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。