离线画像业务介绍

news/2023/6/9 20:21:37

2.1 离线画像业务介绍

学习目标

  • 目标
    • 了解画像的构建
  • 应用

2.1.2 离线画像流程

画像构建流程位置:

 

画像构建内容:

画像的构建作为推荐系统非常重要的环节,画像可以作为整个产品的推荐或者营销重要依据。需要通过各种方法来构建。

 

 

  • 文章内容标签化:内容标签化,根据内容定性的制定一系列标签,这些标签可以是描述性标签。针对于文章就是文章相关的内容词语。

    • 文章的关键词、主题词
  • 用户标签化:这个过程就是需要研究用户对内容的喜好程度,用户喜欢的内容即当作用户喜好的标签。

    • 在用户行为记录表中,我们所记下用户的行为在此时就发挥出重要的作用了。用户的浏览(时长/频率)、点击、分享/收藏/关注、其他商业化或关键信息均不同程度的代表的用户对这个内容的喜好程度。

 

2.4 离线文章画像计算

学习目标

  • 目标
    • 了解文章画像构成
    • 知道spark tfidf以及TextRank计算工具使用
    • 知道文章画像的计算和构建
  • 应用
    • 应用spark完成文章Tfidf值计算
    • 应用spark完成文章TextRank值计算
    • 应用spark完成文章画像结果值计算与存储

工程目录如下

 

离线文章画像组成需求

文章画像,就是给每篇文章定义一些词。

  • 关键词:TEXTRANK + IDF共同的词
  • 主题词:TEXTRANK + ITFDF共同的词

查看结果:

hive> desc article_profile;
OK
article_id              int                     article_id          
channel_id              int                     channel_id          
keywords                map      keywords            
topics                  array           topics      hive> select * from article_profile limit 1;
OK
26      17      {"策略":0.3973770571351729,"jpg":0.9806348975390871,"用户":1.2794959063944176,"strong":1.6488457985625076,"文件":0.28144603583387057,"逻辑":0.45256526469610714,"形式":0.4123994242601279,"全自":0.9594604850547191,"h2":0.6244481634710125,"版本":0.44280276959510817,"Adobe":0.8553618185108718,"安装":0.8305037437573172,"检查更新":1.8088946300014435,"产品":0.774842382276899,"下载页":1.4256311032544344,"过程":0.19827163395829256,"json":0.6423301791599972,"方式":0.582762869780791,"退出应用":1.2338671268242603,"Setup":1.004399549339134}   ["Electron","全自动","产品","版本号","安装包","检查更新","方案","版本","退出应用","逻辑","安装过程","方式","定性","新版本","Setup","静默","用户"]
Time taken: 0.322 seconds, Fetched: 1 row(s)

步骤:

1、原始文章表数据合并

2、所有历史文章Tfidf计算

3、所有历史文章TextRank计算

2.4.1 原始文章数据的合并

为了方便与进行文章数据操作,将文章相关重要信息表合并在一起。通过spark sql 来进行操作

2.4.1.1 创建Spark初始化相关配置

在_init_文件中,创建一个经常用到的基类

  • 定义好spark启动的类别,以及相关内存设置
SPARK_APP_NAME = None # APP的名字
SPARK_URL = "yarn" # 启动运行方式SPARK_EXECUTOR_MEMORY = "2g" # 执行内存
SPARK_EXECUTOR_CORES = 2 # 每个EXECUTOR能够使用的CPU core的数量
SPARK_EXECUTOR_INSTANCES = 2 # 最多能够同时启动的EXECUTOR的实例个数ENABLE_HIVE_SUPPORT = False
  • 创建相关配置、包,建立基类
from pyspark import SparkConf
from pyspark.sql import SparkSession
import osclass SparkSessionBase(object):SPARK_APP_NAME = NoneSPARK_URL = "yarn"SPARK_EXECUTOR_MEMORY = "2g"SPARK_EXECUTOR_CORES = 2SPARK_EXECUTOR_INSTANCES = 2ENABLE_HIVE_SUPPORT = Falsedef _create_spark_session(self):conf = SparkConf()  # 创建spark config对象config = (("spark.app.name", self.SPARK_APP_NAME),  # 设置启动的spark的app名称,没有提供,将随机产生一个名称("spark.executor.memory", self.SPARK_EXECUTOR_MEMORY),  # 设置该app启动时占用的内存用量,默认2g("spark.master", self.SPARK_URL),  # spark master的地址("spark.executor.cores", self.SPARK_EXECUTOR_CORES),  # 设置spark executor使用的CPU核心数,默认是1核心("spark.executor.instances", self.SPARK_EXECUTOR_INSTANCES))conf.setAll(config)# 利用config对象,创建spark sessionif self.ENABLE_HIVE_SUPPORT:return SparkSession.builder.config(conf=conf).enableHiveSupport().getOrCreate()else:return SparkSession.builder.config(conf=conf).getOrCreate()

新建一个目录,用于进行文章内容相关计算目录,创建reco_sys推荐系统相关计算主目录:下面建立离线offline以及full_cal

[root@hadoop-master reco_sys]# 
[root@hadoop-master reco_sys]# tree
.
└── offline├── full_cal└── __init__.py

2.4.1.2 进行合并计算

由于每次调试运行spark时间较长,我们最终代码放在pycharm开发目录中,使用jupyter notebook进行开发

在项目目录开启

jupyter notebook --allow-root --ip=192.168.19.137
  • 注意:本地内存不足的情况下,尽量不要同时运行多个Spark APP,否则比如查询HVIE操作会很慢,磁盘也保证足够

 

 

  • 1、新建文章数据库,存储文章数据、中间计算结果以及文章画像结果
create database if not exists article comment "artcile information" location '/user/hive/warehouse/article.db/';
  • 1、原始文章数据合并表结构,在article数据库中
    • sentence:文章标题+内容+频道名字的合并结果
CREATE TABLE article_data(
article_id BIGINT comment "article_id",
channel_id INT comment "channel_id", 
channel_name STRING comment "channel_name",
title STRING comment "title",
content STRING comment "content",
sentence STRING comment "sentence")
COMMENT "toutiao news_channel"
LOCATION '/user/hive/warehouse/article.db/article_data';
hive> select * from article_data limit 1;
OK
1       17      前端    Vue props用法小结原荐   <p><strong>Vue props用法详解</strong>组件接受的选项之一 props 是 Vue 中非常重要的一个选项。父子组件的关系可以总结为
  • 3、新建merge_data.ipynb文件
    • 初始化spark信息
import os
import sys
# 如果当前代码文件运行测试需要加入修改路径,避免出现后导包问题
BASE_DIR = os.path.dirname(os.path.dirname(os.getcwd()))
sys.path.insert(0, os.path.join(BASE_DIR))
PYSPARK_PYTHON = "/miniconda2/envs/reco_sys/bin/python"
# 当存在多个版本时,不指定很可能会导致出错
os.environ["PYSPARK_PYTHON"] = PYSPARK_PYTHON
os.environ["PYSPARK_DRIVER_PYTHON"] = PYSPARK_PYTHON
from offline import SparkSessionBase

创建合并文章类,集成sparksessionbase

class OriginArticleData(SparkSessionBase):SPARK_APP_NAME = "mergeArticle"SPARK_URL = "yarn"ENABLE_HIVE_SUPPORT = Truedef __init__(self):self.spark = self._create_spark_session()
  • 读取文章进行处理合并
oa = OriginArticleData()
oa.spark.sql("use toutiao")
# 由于运行速度原因,选择部分数据进行测试
basic_content = oa.spark.sql("select a.article_id, a.channel_id, a.title, b.content from news_article_basic a inner join news_article_content b on a.article_id=b.article_id where a.article_id=116636")

合并数据

import pyspark.sql.functions as F
import gc# 增加channel的名字,后面会使用
basic_content.registerTempTable("temparticle")
channel_basic_content = oa.spark.sql("select t.*, n.channel_name from temparticle t left join news_channel n on t.channel_id=n.channel_id")# 利用concat_ws方法,将多列数据合并为一个长文本内容(频道,标题以及内容合并)
oa.spark.sql("use article")
sentence_df = channel_basic_content.select("article_id", "channel_id", "channel_name", "title", "content", \F.concat_ws(",",channel_basic_content.channel_name,channel_basic_content.title,channel_basic_content.content).alias("sentence"))
del basic_content
del channel_basic_content
gc.collect()# sentence_df.write.insertInto("article_data")

运行需要时间等待成功,如果还有其他程序运行,手动释放内存,避免不够

del basic_content
del channel_basic_content
gc.collect()

然后执行查询,看看是否写入选定的文章

hive> select * from article_data;

上传合并完成的所有历史数据

以上测试在少量数据上进行测试写入合并文章数据,最终我们拿之前合并的所有文章数据直接上传到hadoop上使用

hadoop dfs -put /root/hadoopbak/article.db/article_data/ /user/hive/warehouse/article.db/article_data/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4556119.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

C# 透明窗体,上面的label文字毛边怎么去掉,透明窗体字体有毛边的问题 处理办法,设置相近色

是否还有更好的窗体透明的方法&#xff0c;可以解决字体毛边的问题。 我现在窗体透明的方法是&#xff1a;但是这样就会有 this.BackColor Color.White;this.TransparencyKey Color.White; 看到有白边怎么办&#xff1f; 处理相近色 string 字体颜色16进制 "FF0000&quo…

css实现渐变色遮罩层(模糊毛边)

CSS实现模糊毛边效果 效果如图 css样式代码 .el-table>td {border none } .el-table::before {height 40pxbackground linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 1))pointer-events none }核心思路 取消table边框使用伪元素模拟边框linear-gradie…

UE4 如何解决摄像头移动毛边问题

UE4 如何解决摄像头移动毛边问题当视角改变或者物体运动时周边会产生毛边&#xff0c;像下面这种效果 解决方法是&#xff1a;在场景中找到【PostProcessVolume】&#xff0c;如果场景中没有&#xff0c;就放入一个。用他包裹住场景&#xff0c;设置下面的amount 为 0 效果如…

Python OpenCV cv2缩放后合成图像有毛边

文章目录问题描述解决方案参考文献问题描述 cv2缩放&#xff08;放大和缩小&#xff09;后合成的图像有毛边 1.png 2.png import cv2 from PIL import Imageimage cv2.imread(1.png, cv2.IMREAD_UNCHANGED) # 350350的PNG图像 image cv2.resize(image, (400, 400), in…

wpf的毛边窗体效果 前台代码

<Window x:Class"wpfwindowsmove.毛边窗体" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" Title"毛边窗体" Height"300&…

Unity3D使用透明视频,解决Pr导出WebM毛边问题

1. 安装插件。 在Pr中安装导出WebM格式所需的Pr插件 https://www.fnordware.com/WebM/ 本文使用插件版本。 安装步骤比较简单。安装结束需要重启PR。 2. 导入素材。 打开PR&#xff0c;导入带透明通道格式的MOV文件。如果视频文件有音频合成的需要可以一并导入。 3. 内容调…

canvas绘图有锯齿毛边问题的解决

canvas绘图有锯齿毛边问题的解决canvas绘制的一个圆形&#xff0c;用于表现移动端的朝向及视场角&#xff0c;绘制完成后出现了明显的锯齿&#xff0c;移动端看的时候也是非常明显&#xff0c;如下图所示&#xff1a; 本次主要是通过 hidpi-canvas 有效地解决。 原理与实现也都…

UGUI——Text文字 不清晰or有毛边儿

文章目录一、放大Text的尺寸、字体&#xff0c;缩小相应倍数的比例1、 数据对比&#xff1a;2、效果对比&#xff1a;3、注意&#xff1a;二、土方法&#xff1a;复制Text本身&#xff0c;重叠多个三、用TextMeshPro方式解决 建中文字体踩坑1、像建普通Text那样&#xff0c;建T…