码迷,mamicode.com
首页 > 其他好文 > 详细

spark中的透视函数pivot

时间:2020-07-28 17:17:13      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:str   seq   开发   函数   src   cart   输出   height   填充   

透视函数其实就是我们excel中常用的数据透视表相似,先来看个例子。

以下是准备的数据源,数据是电商系统中用户的行为数据(浏览,收藏,加购,成交,评分等),score为统计次数。

对应的字段分别为 租户id,用户id,商品编码Id,行为事件代码,当日统计次数,统计日期。

技术图片

 

现在我们要转换成目标的数据是 租户中每个用户的所有行为记录在一行能够展示,直观点看下图。

对应的字段是 租户Id,用户id,商品id,加购,浏览,收藏,评分,成交

技术图片

 

 

了解了需求以后,我们来看实际的开发如下:

先获取数据源:

val eventRDD = spark.sql("select tenantId,userId,spuId,eventCode,score,dt from dws.dws_user_event_stat")

 然后进行转换,以下可以理解为:

groupBy: 对 tenantId,userId,spuId 进行分组

pivot: 对eventCode进行透视,

sum: 对score进行求和,

na.fill(0): 最后对空值进行处理,空值默认填充0.

 val userEventScore = eventRDD.groupBy("tenantId","userId","spuId")
            .pivot("eventCode")
            .sum("score").na.fill(0)

性能优化:

为了使性能达到最优,需要指定透视列对应的不同值,即指定eventCode包含的具体的值有哪些放到一个Seq中。

 val userEventScore = eventRDD.groupBy("tenantId","userId","spuId")
            .pivot("eventCode",Seq("goodsCart","goodsView","goodsFavorite","goodsRate","orderTrade"))
            .sum("score").na.fill(0)

最后输出的结果如上面截图所示。

 

 

 

 

  

 

spark中的透视函数pivot

标签:str   seq   开发   函数   src   cart   输出   height   填充   

原文地址:https://www.cnblogs.com/30go/p/13391298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!