spark 分组后, 取 pay_time 最小的记录的pay_amount

nameMirck 2018-10-25 11:12:19
有一个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"), # 累计充值金额
# 如何获得首充金额
)


目的是分析出玩家的首充时间和首充金额
...全文
146 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
两种方式:
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的信息,即每个用户,首充时间,首充金额。

1,261

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧