前言:
本人之前情况是有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信息表中以