
大数据Spark/SQL/MR
大数据Spark/SQL/MR
英国老鼠_
腾讯微信算法工程师
展开
-
解决Spark窗口统计函数rank()、row_number()、percent_rank()不能忽略空值问题
目录【问题背景】【解决方法1:计算空值占比、非空排序最小值,对结果进行映射】【解决方法2:将排序列单独选出来,filter空值后再排序】【解决方法3:进行两次排序,根据两次排序结果计算最终结果】【优缺点对比】【解决方法推荐】【问题背景】假如我们手头上有100w篇文章,想根据阅读量、点赞率对文章进行评分(阅读量>1000时,点赞率才有效)。这里拿5篇文章作为例子...原创 2020-01-23 22:12:06 · 4831 阅读 · 1 评论 -
解决Spark窗口统计函数rank()、row_number()、percent_rank()的OOM问题
目录1. 窗口函数功能介绍一个简单的例子一个复杂的例子2.数据量过大时的OOM问题问题及原因解决方法1:用SQL处理解决方法2:转为rdd进行处理解决方法3:将数据量过多的分组进行随机打散,从而近似排序1. 窗口函数功能介绍在利用Spark SQL按分组统计每个组内topN,或者相对某个指标归一化到[0,1]区间上时,可以使用spark的窗口函数...原创 2020-01-22 15:38:43 · 5051 阅读 · 0 评论 -
关于spark persist()的两个坑
目录【坑1:persist() + show()不能缓存全部数据】【坑2:unpersist()一个rdd时会同时unpersist()子RDD】【坑1:persist() + show()不能缓存全部数据】对于一个有100个分区的数据,假如你对其persist()后进行show(10),那么spark只会把第一个分区缓存起来,show前10条数据。如果你show的数据量超过了一个...原创 2020-01-22 15:16:10 · 4822 阅读 · 2 评论 -
Spark如何检查DataFrame/RDD是否已缓存
【方法1:在spark UI中查看】在spark脚本运行后,打开spark UI的Storage界面,便能看到当前已缓存的所有rdd【方法2:利用tempView和catalog】先把数据注册为临时表,然后可以通过catalog来检查临时表是否已缓存package high_quality._historyimport org.apache.log4j.{Level, L...原创 2020-01-22 14:52:25 · 1130 阅读 · 0 评论 -
Spark临时表tempView的注册/使用/注销
【背景】Spark脚本中可以通过sparkContext.sql("xxxx")的方式直接调用SQL代码,但其限制是处理的表必须是在spark context中已注册的临时表。临时表不会占用额外内存,可以理解为是对内存空间重新命名了一下而已。【临时表的创建】// 创建它的SparkSession对象终止前有效df.createOrReplaceTempView("tempVi...原创 2020-01-22 14:41:07 · 5581 阅读 · 0 评论