有一个dataframe
[user | pay_time | pay_amount]按照用户分组后如何获取支付时间(pay_time ) 最小的那条记录的 支付金额 pay_amount
df.groupby("user").agg(
F.min("pay_time ").alias("first_pay_time"), # 首充时间
F.sum("pay_amount").alias("tot_pay_amount"), # 累计充值金额
# 如何获得首充金额
)
目的是分析出玩家的首充时间和首充金额
[user | pay_time | pay_amount]按照用户分组后如何获取支付时间(pay_time ) 最小的那条记录的 支付金额 pay_amount
df.groupby("user").agg(
F.min("pay_time ").alias("first_pay_time"), # 首充时间
F.sum("pay_amount").alias("tot_pay_amount"), # 累计充值金额
# 如何获得首充金额
)
目的是分析出玩家的首充时间和首充金额
解决方案 »
- 【公告】做OpenStack发贴达人,赢CSDN下载频道VIP卡——获奖名单公布
- OpenStack在云计算领域有何竞争力
- OpenStack网络原理简介
- 学云计算专业怎么样
- 求教spark graphx最短路径的问题
- 美国上传数据到阿里云服务器速度慢
- 机器学习课程分享下载
- 我配置好了zabbix监控JMX,用的是zabbix自带的JMX模板,配置里显示JMX绿色可用,但监控项里的所有的内容都不支持。这怎么解决
- 如何手动重启ceph各个节点的服务?
- 想购买云服务器做镜像(备份)网站,希望能方便同步原主机的数据
- 有没有人spark on yarn 模式,开发spark streaming
- 我想把一个spark dataframe内的数据与另一个dataframe比较大小,然后筛选出结果,请问我应该使用什么函数?求大神解答,感觉很简单
1:val first_TimeDF = df.groupby("user").agg(F.min("pay_time ").alias("first_pay_time"))
val full_InfoDF = first_TimeDF.join(df, Seq("user", "pay_time"), "left")
这种方式显然需要先聚合求最小(丢失了首充金额),需要再join回原先的数据集。
2:val win = Window.partitionBy("user").orderBy("pay_time")
val firstDF = df.withColumn("rownum", row_number().over(win)).filter("rownum = 1").drop("rownum")
这种方式使用了开窗函数,通过user分组,pay_time升序排列,获取序号为1的信息,即每个用户,首充时间,首充金额。