Сумма стоимости на основе другого значения, присутствующего в СДР - PullRequest
0 голосов
/ 06 мая 2019

У меня есть rdd, как показано ниже, и я хочу суммировать сумму, которую тратит каждый пользователь с интервалом в 15 дней для каждого года, у меня есть такие данные Здесь 0 означает не тратить с 15 дней 1 означает с 15 дней

 user    year    15_days     amount  
 vimal   2013       0        10   
 vimal   2013       1        15
 vimal   2013       1        12
 vimal   2013       0        14
 vimal   2014       1        10
 vimal   2013       0        14
 vimal   2014       1        10
 vimal   2014       1        05
 vimal   2014       0        05
 vimal   2014       0        10

Я попробовал приведенный ниже код, но не получил ожидаемого результата

val data_new = data.select($"user", "year", $"15_days", $"amount").rdd.groupBy(x=>((x.getString(0), x.getInt(1))))
.map(
x=>{
val user = x.getString(0) 
val yr = x.getInt(1)
val 15_days = x.getInt(2)
val amount = x.getFloat(3)
var amt_sum:Float = 0.0F
val itb = Iterator(x.getInt(2))
var no_times: Int = 0I
for(i <- x.indices)
if (15_days==1 && itb.next ==1)
{
amt_sum + = amount
}
else
{  
amt_sum = amount
}
case (amt_sum ) 
{
 if(amt_sum>=25)
 no_times + = 1
}
else
 { 
 no_times  =0 
 }
}
 (user,year,no_times)
)

 user    year    15_days     amount   amt_sum
 vimal   2013       0        10          10
 vimal   2013       1        15          15
 vimal   2013       1        12          27
 vimal   2013       0        14          14
 vimal   2014       1        10          10   
 vimal   2013       0        14          14 
 vimal   2014       1        10          10
 vimal   2014       1        25          35
 vimal   2014       0        05           0
 vimal   2014       0        10           0

Ожидаемый конечный результат, как показано ниже

vimal 2013 1
vimal 2014 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...