线上lgb使用

1. 单机版模型 转 spark集群 打分

速度超快,十亿数据,十多分钟!!!

1.1 主函数-主要获取模型路径

# coding=utf-8
import pyspark.sql.functions as F
from pyspark.sql import SparkSession
from pyspark.sql.types import DoubleType
import argparse, bisect, os
import lightgbm as lgb
import pandas as pddef main():parser = argparse.ArgumentParser()parser.add_argument("--dt", type=str)args = parser.parse_args()dt = args.dtspark = SparkSession.builder.appName("model_predict").enableHiveSupport().getOrCreate()sc = spark.sparkContextsc.setLogLevel("ERROR")current_path = os.getcwd() + '/files/'  # 获取线上项目路径,files为项目别名model_file_path = current_path + f'superior_user/lgb_model'pred(dt, spark, model_file_path)

1.2 定义集群打分函数

模型训练时的特征处理,预测时在这里进行。

这里每次处理的是一条数据,会对集群上各个pod上的数据进行处理。

def predict_udf(model, feature_list):def inner(*selectCols):X = pd.DataFrame(dict(zip(feature_list, selectCols)))# X = X.astype("float")for col in ['fea1', 'fea2', 'fea3']:  # 类别特征指定X[col] = X[col].astype('category')y_pre = model.predict(X)return pd.Series(y_pre)return F.pandas_udf(inner, returnType=DoubleType())

1.3 模型结果写入

def pred(dt, spark, model_path):gbm = lgb.Booster(model_file=model_path)dt = '20241104'feature_list = ['fea1', 'fea2', 'fea3', 'fea4']udf = predict_udf(gbm, feature_list)sql = f"select * from db.table_name where dt = '{dt}'"predict_data = spark.sql(sql)pred_df = predict_data.select('uid', 'market', # 保留预测集中的uid、marketudf(*feature_list).alias('score') # 加入模型score)print('pred_df: ', pred_df.show(10))pred_df.createOrReplaceTempView("pred_df")

2. 结果后处理

2.1

black_df = spark.sql(f"""select member_id, 0 as label from db.table_namewhere black_flag = '1'group by member_id 
""")
black_df.createOrReplaceTempView("black_df")
spark.sql("""create table db.table_name_1 stored as orc as select t1.uid,if(t2.uid is null,t1.score,0) as score,if(t2.uid is not null,1,0) as bad_flag from pred_df t1 left join black_df t2 on t1.uid = t2.uid 
""")pred_df.createOrReplaceTempView("stat_df")
if pred_df.count() == 0:raise Exception("the table is null")

2.2 打分根据市场分桶

ppercentile_data = spark.sql("""select market,percentile_approx(score,array(0.20,0.40,0.60,0.80)) as score_bucketfrom db.table_name_1group by market
""").toPandas()
sc = spark.sparkContext
d = {}
for i in percentile_data.to_dict("records"):market = i["market"]score_bucket = i["score_bucket"]d[market] = score_bucketd_bc = sc.broadcast(d)
def my_udf1(market, score):if market is None:return 0score_bucket = d_bc.value[market]x = bisect.bisect_left(score_bucket, score)return xmy_udf1 = F.udf(my_udf1)
stat_df = spark.sql(f"""select * from db.table_name_1 where score is not null""")
stat_df = stat_df.withColumn("score_bucket", my_udf1("market", "score"))
stat_df.createOrReplaceTempView("stat_df")
spark.sql(f"""insert overwrite table db.result_table partition(dt='{dt}')select member_id, site_tp, country_nm,market, score,cast(score_bucket as int) as score_bucketfrom stat_df 
""")
check_result(dt, spark)

1.3 结果校验

def check_result(dt, spark):df = spark.sql(f"""select market,cnt,all_cnt,cnt/all_cnt as ratefrom (select market,count(distinct if(score_bucket=5,uid,null)) as cnt,count(distinct member_id) as all_cnt from db.result_tablewhere dt='{dt}'group by market )""")pdf = df.toPandas()for d in pdf.to_dict("records"):market = d.get("market")rate = d.get("rate")if market:if rate <= 0.045 or rate >= 0.055:raise Exception(f"the superior rate is not good, check please!")return 0

4. 配置文件

11

#!/bin/bash
set -euxo pipefail
echo "$(pwd)"
cd ${tmp_dir}
if [ ! -d ${folder_name} ]; thenmkdir ${folder_name}
fi
cd ${folder_name}
sh ../code_pull.sh https://gitlab.baidu.cn/aiapp/in_score.git main
echo "$(ls)"
name="superior_user"
project_name="in_score"
cd ${project_name}spark-submit --master yarn \
--deploy-mode cluster \
--driver-cores 4 \
--driver-memory 20G \
--num-executors 200 \
--executor-cores 4 \
--executor-memory 4G \
--name ${name} \
--conf spark.yarn.priority=100 \
--conf spark.storage.memoryFraction=0.5 \
--conf spark.shuffle.memoryFraction=0.5 \
--conf spark.driver.maxResultSize=10G \
--conf spark.dynamicAllocation.enabled=false \
--conf spark.executor.extraJavaOptions='-Xss128M' \
--conf spark.sql.autoBroadcastJoinThreshold=-1 \
--conf spark.sql.adaptive.enabled=true \
--conf spark.yarn.dist.archives=../${project_name}.zip#files \
--conf spark.yarn.appMasterEnv.PYTHONPATH=files \
--conf spark.executorEnv.PYTHONPATH=files \
--conf spark.pyspark.python=./env/bin/python \
--archives s3://xxaiapp/individual/bbb/condaenv/mzpy38_v2.tar.gz#env \  # 环境文件别名env
superior_user/train_test.py --dt ${dt}  # 执行主文件

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Uniapp安装Pinia并持久化(Vue3)

安装pinia 在uni-app的Vue3版本中&#xff0c;Pinia已被内置&#xff0c;无需额外安装即可直接使用&#xff08;Vue2版本则内置了Vuex&#xff09;。 HBuilder X项目&#xff1a;直接使用&#xff0c;无需安装。CLI项目&#xff1a;需手动安装&#xff0c;执行yarn add pinia…

JVM基础

JRE&#xff1a;运行java字节码的环境。它是运行已编译java程序所需要的所有内容的集合&#xff0c;主要包括java虚拟机JVM和java基础类库&#xff08;class library&#xff09; JVM&#xff1a;是Java Virtual Machine的缩写&#xff0c;即Java虚拟机。‌它是一个虚构的计算…

vm虚拟机中添加网卡却在network-scripts文件找不到,解决方法

前言 进入network-scripts文件发现只有eth0网卡 ifconfig发现添加进去了 解决方法 nmcli d s #查看目前服务器中所有网卡 手动启用该接口 nmcli d connect eth1 重启网卡 systemctl restart network 解决问题

keepalive+mysql8双主

1.概述 利用keepalived实现Mysql数据库的高可用&#xff0c;KeepalivedMysql双主来实现MYSQL-HA&#xff0c;我们必须保证两台Mysql数据库的数据完全一致&#xff0c;实现方法是两台Mysql互为主从关系&#xff0c;通过keepalived配置VIP&#xff0c;实现当其中的一台Mysql数据库…

论文阅读(一种基于球面投影和特征提取的岩石点云快速配准算法)

目前存在的问题&#xff1a; 在图像配准研究方面比点云配准更早、更有发展。相对之下&#xff0c;点云配准方法不成熟&#xff0c;将图像配准的思想与ICP相结合。 文章主要研究内容&#xff1a; 单站扫描仪的点云数据通过球极坐标转换为数字图像提取图像特征并去除边缘点&#…

人脸检测之MTCNN算法网络结构

MTCNN&#xff08;Multi-task Cascaded Convolutional Networks&#xff09;是一种用于人脸检测和关键点检测的深度学习模型&#xff0c;特别适合在复杂背景下识别出多尺度的人脸。它通过多任务学习来实现人脸检测和人脸关键点定位&#xff08;如眼睛、鼻子、嘴巴的位置&#x…

CocosCreator 构建透明背景应用(最新版!!!)

文章目录 透明原理补充设置截图以及代码step1: electron-js mian.jsstep2:ENABLE_TRANSPARENT_CANVASstep3:SOLID_COLOR Transparentstep:4 Build Web phonestep5:package electron-js & change body background-color 效果图补充 透明原理 使用Cocos creator 做桌面应用开…

【设计模式】结构型模式(三):桥接模式、外观模式

结构型模式&#xff08;三&#xff09;&#xff1a;桥接模式 4.桥接模式&#xff08;Bridge&#xff09;4.1 结构4.2 示例4.2.1 抽象类4.2.2 细化抽象类4.2.3 实现类接口4.2.4 具体实现类4.2.5 客户端 5.外观模式&#xff08;Facade&#xff09; 4.桥接模式&#xff08;Bridge&…

初识Linux

Linux指令 输入指令&#xff0c;实际上是在Linux环境下&#xff0c;做Windows的操作。 ls指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a; 对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。 对于文件&#xff0c;将列出文件名以及其他信息。 常…

【Uniapp】Uniapp Android原生插件开发指北

前言 在uniapp开发中当HBuilderX中提供的能力无法满足App功能需求&#xff0c;需要通过使用Andorid/iOS原生开发实现时&#xff0c;或者是第三方公司提供的是Android的库&#xff0c;这时候可使用App离线SDK开发原生插件来扩展原生能力。 插件类型有两种&#xff0c;Module模…

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…

Redis ——发布订阅

问题引入&#xff1a; 服务器A、B、C、D&#xff0c;客户端&#xff1a;C1&#xff0c;C2&#xff0c;C3&#xff0c;C4&#xff1b; 客户端基于集群聊天服务器的负载均衡分配&#xff1b; C1 被分配到A&#xff0c;C2 被分配到B&#xff0c;C3 被分配到C&#xff0c;C4 被分…

【网络】传输层协议TCP(下)

目录 四次挥手状态变化 流量控制 PSH标记位 URG标记位 滑动窗口 快重传 拥塞控制 延迟应答 mtu TCP异常情况 四次挥手状态变化 之前我们讲了四次挥手的具体过程以及为什么要进行四次挥手&#xff0c;下面是四次挥手的状态变化 那么我们下面可以来验证一下CLOSE_WAIT这…

单链表专题

单链表 1. 链表的概念2. 链表的分类3. 实现无头单向非循环链表&#xff08;单链表&#xff09;3.1 单链表的声明3.2 单链表的打印3.3 尾插3.4 头插3.5 尾删3.6 头删3.7 查找3.8 在指定位置之前插入数据3.9 在指定位置之后插入数据3.10 删除指定节点3.11 销毁链表 4. 一些细节4.…

K8S篇(基本介绍)

目录 一、什么是Kubernetes&#xff1f; 二、Kubernetes管理员认证&#xff08;CKA&#xff09; 1. 简介 2. 考试难易程度 3. 考试时长 4. 多少分及格 5. 考试费用 三、Kubernetes整体架构 Master Nodes 四、Kubernetes架构及和核心组件 五、Kubernetes各个组件及功…

中国500米分辨率逐月平均EVI数据集(2000-2022)

EVI是在归一化植被指数&#xff08;NDVI&#xff09;的基础上进行改进的&#xff0c;通过卫星不同波段探测数据组合而成。EVI考虑了大气校正&#xff0c;包括大气分子、气溶胶、水汽和臭氧等因素&#xff0c;以解决NDVI容易饱和的问题。EVI的计算公式考虑了蓝光和红光波段&…

二级列表联动

介绍 本示例主要介绍了List组件实现二级联动&#xff08;Cascading List&#xff09;的场景。 该场景多用于商品种类的选择、照片不同类型选择等场景。 效果图 使用说明&#xff1a; 滑动二级列表侧控件&#xff08;点击没用&#xff09;&#xff0c;一级列表随之滚动。&…

基于matlab的人民币面额识别

本文通过分析第五版人民币的特征&#xff0c;利用纸币中央数字的特征提取和识别的方法&#xff0c;通过matlab软件实现对第五版人民币的100元、50元和20元的识别。 Matlab函数介绍 Imread 函数imread用于读取图片文件中的数据。 调用格式&#xff1a; A imread(filename,…

Docker篇(实际应用)

目录 一、MySQL 部署 1. 拉取 MySQL 镜像 2. 查看镜像 3. 创建 MySQL 容器 4. 进入 MySQL 容器,登陆 MySQL 5. 远程登陆 MySQL 6. 查看容器 IP 地址 二、tomcat 部署 1. 拉取 tomcat 镜像 2. 创建 tomcat 容器 3. 搭建 Tomcat 服务并部署 web 应用 三、Nginx 部署 …

别名路径联想设置

如何使用/进行路径提示&#xff1f; 找到jsconfig.json文件&#xff0c;如何项目中没有的话&#xff0c;自行创建 {"compilerOptions": {"paths": {"/*": ["./src/*"]}},"exclude": ["node_modules", "dis…