标签系统:
在用户画像的标签系统中,每个标签模型开发(给每个用户或每个商品打每个标签),必须先在标签管理平台注册(新建标签)业务标签(4级标签)、属性标签(5级标签)注册以后,每个标签(业务标签)对应的属性值(属性标签)都有对应标签标识符:tagName、属性标签ID,标识每个标签,将会打到每个用户或商品上,标识此用户或商品的具体标签每个业务标签对应一个模型,就是一个SparkApplication程序运行此应用程序可以给用户或商品打标签;在模型表中记录标签对应的模型关系,以及模型运行时参数信息。
用途:
标签系统的应用非常广泛,具体表现在如下几个方面:
- 内容描述:标签用于描述网站上的内容,帮助用户快速理解内容的主题或性质。
- 分类和过滤:用户可以通过标签对内容进行分类和过滤,从而更容易地找到与特定主题或兴趣相关的内容。
- 标签云和标签树:一些标签系统可以生成标签云或标签树,以更直观地展示标签之间的关系和重要性。标签云通常按照标签的相对重要性以不同的字体大小或样式呈现,而标签树则展示了标签的层次结构。
- 用户画像构建:在标签系统中,用户的各种特征和偏好可以通过标签来表示,从而构建出用户画像。这有助于企业更好地了解用户,实现精细化经营。
每个标签模型开发时,四种主要就是4个步骤:获取标签数据、获取业务数据、打标签、保存标签数据,只是在打标签这个步骤代码不一样以外,其他步骤代码基本上一致或者稍作修改,对标签模型代码进行重构,开发抽象类AbstractModel,既减少了代码的冗余,也使得开发的效率更高,提高了代码的复用性。
创建标签模型的思路:
第一步:使用设计模式:模板方法设计模式(TemplateParttern)
思想:属于一种类继承设计模式,父类(基类)和子类
基类(父类)中有2类方法:
(1)基本方法,可以是具体方法,也可以是抽象方法(给子类实现)
完成每个小的业务功能,比如针对标签模型应用程序来说,
创建SpakrSession实例对象
关闭SparkSession实例对象
加载标签数据
加载业务数据
模板方法
(2)规定基本方法执行顺序
抽象类AbstractModel的代码如下:
import com.rison.tag.config.ModelConfig
import com.rison.tag.meta.{HBaseMata, HBaseMeta}
import com.rison.tag.tools.HBaseTools
import com.rison.tag.utils.SparkUtils
import org.apache.spark.internal.Logging
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
import org.apache.spark.storage.StorageLevel
/**
* 所有标签模型的基类,必须继承此类,实现doTag方法,计算标签
*/
abstract class AbstractModel(modelName: String, modelType: ModelType) extends Logging {
//设置spark应用程序运行的用户:root,默认情况下为当前系统用户
System.setProperty("user.name", "root")
System.setProperty("HADOOP_USER_NAME", "root")
//变量声明
var spark: SparkSession = _
//初始化 构建SparkSession 实例对象
def init(isHive: Boolean): Unit = {
spark = SparkUtils.createSparkSession(