有一個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"), # 累計充值金額
# 如何獲得首充金額
)
目的是分析出玩家的首充時間和首充金額
uj5u.com熱心網友回復:
兩種方式: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的資訊,即每個用戶,首充時間,首充金額。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/42592.html
標籤:Spark
上一篇:spark的rdd問題求助
