У меня есть 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