У меня есть проблема, чтобы рассчитать оценку риска на основе предыдущих строк в Hive по customer_id. Я совершенно новый для scala и улей.Расчет оценки риска на основе предыдущих строк в Hive
, например, вот мой стол Temp1:
customer_id recency_score period_start period_end
a 4 201501 201512
a 4 201502 201601
a 3 201503 201602
a 3 201504 201603
a 2 201505 201604
a 2 201506 201605
a 2 201507 201606
a 2 201508 201607
a 2 201509 201608
a 2 201510 201609
a 2 201511 201610
a 2 201512 201611
b 4 201501 201512
b 4 201502 201601
b 3 201503 201602
b 3 201504 201603
b 3 201505 201604
b 3 201506 201605
b 4 201507 201606
b 3 201508 201607
b 2 201509 201608
b 3 201510 201609
b 2 201511 201610
b 2 201512 201611
Счет риск должен быть:
- 0, если recency_score не идет вниз между двумя периодами
- 1, если recency_score уменьшается между двумя периодами
- 2, если recency_score опускается между двумя периодами, то остается на том же уровне
- 3, если recency_score идет вниз между двумя периодами, а затем идет вниз снова
Эта часть довольно легко, и я нашел, как это сделать, но я хотел бы также принять во внимание этот предыдущий результат в следующий ряд, я имею в виду, если risk_score уже на 2 раньше, а recency_score - на новый risk_score, будет 3, и если recency_score останется стабильным, тогда он останется на уровне 2.
Фактически, я не знаю, как сохранить в «памяти» предыдущий risk_score.
Еще одна вещь, количество строк для каждого Customer_ID изменяется (для одного customer_id это может быть 12, для другого это может быть 8, для другого это может быть 3 ...)
Так что я хотел бы что-то вроде этого:
customer_id recency_score period_start period_end risk_score
a 4 201501 201512 0
a 4 201502 201601 0
a 3 201503 201602 1
a 3 201504 201603 2
a 2 201505 201604 3
a 2 201506 201605 3
a 2 201507 201606 3
a 2 201508 201607 3
a 2 201509 201608 3
a 2 201510 201609 3
a 2 201511 201610 3
a 2 201512 201611 3
b 4 201501 201512 0
b 4 201502 201601 0
b 3 201503 201602 1
b 3 201504 201603 2
b 3 201505 201604 2
b 3 201506 201605 2
b 4 201507 201606 0
b 3 201508 201607 1
b 2 201509 201608 3
b 3 201510 201609 0
b 2 201511 201610 1
b 2 201512 201611 2
Если у вас есть какие-то идеи для меня, я буду благодарен
BR, Софи