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

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务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

 

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

相关文章
|
6月前
|
前端开发 JavaScript Java
用Python实现高效数据记录!Web自动化技术助你告别重复劳动!
用Python实现高效数据记录!Web自动化技术助你告别重复劳动!
|
4月前
|
存储 C语言 索引
【实战编程】学生信息管理系统:一键实现数据插入、智能排序、精准查询与成绩统计(附完整源码,即学即用!)
结构体数组是C语言中一种复合数据类型,它结合了结构体的灵活性和数组的有序集合特性,允许你定义一组具有相同结构的数据项。结构体定义了一组不同数据类型的变量集合,而结构体数组则是这种结构的连续内存块,每个元素都是该结构类型的实例。这种方式特别适合管理具有相似属性的对象集合,如学生信息、员工记录等。
|
6月前
|
搜索推荐 物联网 计算机视觉
二二复制公排模式系统开发|案例分析
无论未来做什么样的社交+零售模式
|
6月前
|
安全
哈希竞猜游戏系统开发玩法详情/功能步骤/需求设计/流程方案/源码程序
Developing a hash guessing game system can provide a fun gaming experience. The following are possible gameplay and rules for your reference:
|
6月前
|
前端开发 搜索推荐 算法
如何用Java实现一套特色民宿平台系统?
如何用Java实现一套特色民宿平台系统?
127 0
|
安全 区块链 数据安全/隐私保护
dapp互助预约排单二二复制/三三复制大小公排项目系统开发稳定版/玩法详情/指南教程/规则方案/需求设计/案例源码
能合约在代码中加入了许多安全校验机制,比如对输入参数范围的检查、防止重入攻击的修复等。并且智能合约在运行过程中记录每一笔交易以及合约状态的变化,确保所有的交易和状态都是经过验证和授权的,不会受到篡改。
|
前端开发 定位技术 容器
高德地图进阶开发实战案例(7):点是否在多边形内和内外部的数量统计的解决方案
高德地图进阶开发实战案例(7):点是否在多边形内和内外部的数量统计的解决方案
107 0
|
安全 算法 分布式数据库
DAPP哈希竞猜游戏系统开发详情案例/规则玩法/逻辑方案/稳定版
  区块链(Blockchain)是一种分布式数据库技术,它以去中心化和共识机制为基础,用于记录和验证数据的交易和交互。它被设计为一种安全、透明和可靠的方式来管理数据和信息。
|
JSON API 定位技术
商圈库_思路梳理 | 学习笔记
快速学习商圈库_思路梳理。
商圈库_思路梳理 | 学习笔记
|
分布式计算 Java Scala
商圈库_功能_完成 | 学习笔记
快速学习商圈库_功能_完成。
商圈库_功能_完成 | 学习笔记