统计型标签
统计型标签是需要使用聚合函数计算后得到的标签,比如最近3个月的退单率,用户最常用的支付方式等等.
年龄段标签开发:
1、创建sparkSQL实例没用于读取hbase mysql数据
2、链接mysql数据库
url: String, table: String, properties: Properties
3、读取四级标签数据
inType=HBase##zkHosts=192.168.10.20##zkPort=2181##hbaseTable=tbl_users##family=detail##selectFields=id,birthday
使用## 切分再使用=切分
将map 转换成样HBaseMeta例类
var hbaseMeta: HBaseMeta = getHBaseMeta(fourMap)
4读取mysql数据库中的的五级标签
封装成 TagRule样例类
获取id 和 rule
封装样列类
5根据mysql数据中的四级标签的规则 读取hbase 数据
若使用mysql客户端读取数据效率较慢,将hbase 作为数据源,读取效率较快。
6、使用五级标签与hbase数据进行匹配获得标签
根据五级标签数据和hbase数据进行标签匹配 的到最终的标签
编写udf函数 。
7、解决数据覆盖的问题【职业标签会覆盖前面的所有标签】
读取test,追加标签后覆盖写入
读取test内的历史标签数据,追加新计算出来的标签到历史数据,最后覆盖写入hbase
A 读取test内的历史标签数据【不是职业标签,是其他的,已经计算出来的标签】
B 追加新计算出来的标签到历史数据
新表join新表,条件是两个表的userId相等
C 最后覆盖写入hbase
8、将最终数据写入hbase
代码:
package cn.itcast.czxy.BD18.Job
import java.util.Properties
import cn.itcast.czxy.BD18.Job.bean.{
HBaseMeta, TagRule}
import org.apache.spark.sql.{
DataFrame, Dataset, Row, SparkSession}
object birthdayTag {
def main(args: Array[String]): Unit = {
//1、创建sparkSQL实例没用于读取hbase mysql数据
val spark: SparkSession = SparkSession.builder().appName("birthdayTag").master("local[*]").getOrCreate()
//2、链接mysql数据库
//url: String, table: String, properties: Properties
var url="jdbc:mysql://bd001:3306/tags_new?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&user=root&password=123456"
var table="tbl_basic_tag"
var properties=new Properties
val mysqlConn: DataFrame = spark.read.jdbc(url,table,properties)
//隐式转换
import spark.implicits._
import scala.collection.JavaConverters._
import org.apache.spark.sql.functions._
//3、读取四级标签数据
//inType=HBase##zkHosts=192.168.10.20##zkPort=2181##hbaseTable=tbl_users##family=detail##selectFields=id,birthday
val fourDS: Dataset