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

本文涉及的产品
云原生大数据计算服务 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

 

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

相关文章
|
4月前
|
数据可视化 前端开发 JavaScript
本来不想分享的,但这套可视化大屏确实不错
本来不想分享的,但这套可视化大屏确实不错
|
7月前
|
安全
哈希竞猜游戏系统开发玩法详情/功能步骤/需求设计/流程方案/源码程序
Developing a hash guessing game system can provide a fun gaming experience. The following are possible gameplay and rules for your reference:
|
安全 区块链 数据安全/隐私保护
dapp互助预约排单二二复制/三三复制大小公排项目系统开发稳定版/玩法详情/指南教程/规则方案/需求设计/案例源码
能合约在代码中加入了许多安全校验机制,比如对输入参数范围的检查、防止重入攻击的修复等。并且智能合约在运行过程中记录每一笔交易以及合约状态的变化,确保所有的交易和状态都是经过验证和授权的,不会受到篡改。
|
存储 前端开发 安全
dapp矩阵公排互助预约排单抢单项目系统开发指南流程丨案例设计丨功能逻辑丨规则玩法丨项目方案丨源码程序
需求分析:与团队明确系统的需求和目标,包括公排互助预约排单抢单项目系统的功能、规则、奖励机制等方面。
|
监控 安全 数据挖掘
泰山众筹系统开发详细指南丨设计方案丨规则玩法丨逻辑功能丨步骤需求丨源码程序
泰山众筹系统是一个基于区块链技术的众筹平台,旨在为用户提供一个安全、透明和高效的众筹环境。
|
存储 前端开发 安全
什么是盲盒游戏系统开发规则丨指南教程丨功能逻辑丨需求项目丨源码方案
确定盲盒游戏的目标受众、玩法要素和游戏规则。 - 确定游戏系统的核心功能,如盲盒的获取、开启、物品收集、交易等。 - 确定技术平台和开发语言,如移动端应用的开发是选择原生开发(如iOS的Swift或Android的Java/Kotlin)还是跨平台开发(如React Native或Flutter)。
|
前端开发 JavaScript NoSQL
交易所系统开发详细需求/案例规则/玩法设计/步骤项目/源码教程
The development source code of the exchange system refers to the source code used to build the entire exchange system. Exchange development source code usually includes multiple parts such as front-end, back-end, and database.
|
数据可视化 数据挖掘 BI
【氚云】还在用Excel表格做数据分析?两步打造数据大脑
还在用Excel表格做数据分析?两步打造数据大脑
534 0
【氚云】还在用Excel表格做数据分析?两步打造数据大脑
|
安全 算法 分布式数据库
DAPP哈希竞猜游戏系统开发详情案例/规则玩法/逻辑方案/稳定版
  区块链(Blockchain)是一种分布式数据库技术,它以去中心化和共识机制为基础,用于记录和验证数据的交易和交互。它被设计为一种安全、透明和可靠的方式来管理数据和信息。
|
安全 区块链
DAPP游戏拆分互助系统开发玩法规则/案例分析/项目方案/源码说明
每一个区块中储存有一定的数据或信息,它们根据各自诞生的时间先后顺序连接成链条。所形成的这个链条是可以被保存在所有的服务器中。也就是说,只要整个体系中有任意一台服务器可以正常运作,整条区块链就是安全的。