Scala 查找在给定月份花费最大金额的客户id

Scala 查找在给定月份花费最大金额的客户id,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我想计算6月份花费最高金额的客户id May-2017-120-245.50 Jun-2017-124-21.50 Jun-2017-110-34.00 Jun-2017-120-200.00 Jul-2017-124-546.50 Jul-2017-110

我想计算6月份花费最高金额的客户id

May-2017-120-245.50                                
Jun-2017-124-21.50                                                                
Jun-2017-110-34.00                 
Jun-2017-120-200.00      
Jul-2017-124-546.50  
Jul-2017-110-1500.00  
Jun-2017-124-245.50
数据集:

May-2017-120-245.50                                
Jun-2017-124-21.50                                                                
Jun-2017-110-34.00                 
Jun-2017-120-200.00      
Jul-2017-124-546.50  
Jul-2017-110-1500.00  
Jun-2017-124-245.50
代码:

May-2017-120-245.50                                
Jun-2017-124-21.50                                                                
Jun-2017-110-34.00                 
Jun-2017-120-200.00      
Jul-2017-124-546.50  
Jul-2017-110-1500.00  
Jun-2017-124-245.50

我不知道如何得到结果。有人能帮我吗?

鉴于您的示例数据由同一客户在给定月份的多个交易组成,以下解决方案包括首先将文本数据加载到数据框中,筛选目标年-月,汇总每个客户的金额,最后获得总金额最大的行:

May-2017-120-245.50                                
Jun-2017-124-21.50                                                                
Jun-2017-110-34.00                 
Jun-2017-120-200.00      
Jul-2017-124-546.50  
Jul-2017-110-1500.00  
Jun-2017-124-245.50
// /path/to/textfile
May-2017-120-245.50
Jun-2017-124-21.50
Jun-2017-110-34.00
Jun-2017-120-200.00
Jul-2017-124-546.50
Jul-2017-110-1500.00
Jun-2017-124-245.50

import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.Window

val df = spark.read.option("delimiter", "-").csv("/path/to/textfile").
  toDF("month", "year", "cust_id", "amount")

df.
  where($"year" === "2017" && $"month" === "Jun").
  groupBy($"cust_id").agg(sum($"amount").as("total_amount")).
  withColumn("amountRank", dense_rank.over(Window.orderBy($"total_amount".desc))).
  where($"amountRank" === 1).
  show
// +-------+------------+----------+
// |cust_id|total_amount|amountRank|
// +-------+------------+----------+
// |    124|       267.0|         1|
// +-------+------------+----------+
请注意,
densite_rank
用于涵盖多个客户拥有相同最大总金额的情况

May-2017-120-245.50                                
Jun-2017-124-21.50                                                                
Jun-2017-110-34.00                 
Jun-2017-120-200.00      
Jul-2017-124-546.50  
Jul-2017-110-1500.00  
Jun-2017-124-245.50