pyspark小白:尝试性能优化一点心得

本文作者从Python编程背景出发,分享了在学习Spark过程中遇到的性能优化问题。在解决视频TAG与昵称简介匹配度的业务场景中,通过数据层面的优化(减少冗余,压缩数据)和Spark调优(使用rdd.map,broadcast+mapjoin,cache/persist)实现了性能提升。V2版本避免了全量数据长时间未完成计算的问题,展示了从脚本到Spark的性能飞跃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

本人之前情况是有python编程基础,但对大数据分布式的掌握限于皮毛的理论知识。借着任务驱动,历时两周空闲时间,先后学习了1.spark(pyhon版)之RDD编程,SparkSql,SparkMl;2.了解spark运行的基本底层原理,在写代码时对spark性能优化的一些手段。其实很浅,把自己一些tips整理出来,希望能帮助到同样开始入门的小白白。

业务场景:

业务上希望能找到文不对题的CP(昵称简介与本人生产视频不符,会给消费者先入为主带来一些主观上的意外感的CP)。一个指标是计算视频TAG与昵称简介的匹配度。

V1版本:

从业务和计算量上考虑,入选的CP是核心CP(在90天有过生产行为,数量级在10w+),为了计算匹配度,需要针对CP生产的每一条视频进行TAG匹配。

在对CP与媒资表中VID做关联之后,我将关联数据结果存入tdw,之后写py脚本做分词与匹配度的计算。

但在小样本中调试代码完毕后,在全量CP重跑数据时,一天也没有产出结果。在查看数据集后发现单日数据量级在千万级别。由此放弃了脚本,进入Spark。

V2版本:

为了提升性能,结合数据特点和spark优化方法,从以下几方面做出了改进:

数据层面:

1.不产出CP和VID关联的宽表,减少冗余。分别抽取CP信息表(cp_uin,nick,desc),VID信息表待用(cp_uin,vid,tag)。

2.观察到很多CP都有为产出VID取相同TAG的习惯,因此VID信息表中以TAG为group by的key,增加“记录数”这一字段,把某一CP所有相同TAG的视频缩一列,用记录数这一字段记录相同TAG的视频数(此数帮助计算后续匹配度)。

Spark调优层面:

1.rdd.map操作

将两个表分别转为rdd,此操作很基础,spark原理将数据转成rdd格式分布式计算加快速度。

2.broadcast+mapjoin操作

broadcast原理是 “每次启动任务传输大对象” -》“每个executer传输一次大对象,并用技术加快传输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值