Я работаю с данными об отношениях и мне нужно найти дедушку (с минимальной датой рождения) для всех детей. Я использую спарк 1.6
Ввод
parent child DOB
A B 1
B C 2
C D 3
P Q 1
Q R 2
Output
parent child Oldest
A B A
B C A
C D A
P Q P
Q R P
Ниже sql решает проблему, но с большим набором данных он принимает столько исполнителей
Step-1
select A.parent, A.child
,CASE WHEN A.DOB < B.DOB THEN A.parent
WHEN A.DOB > B.DOB THEN B.parent
ELSE A.parent
END AS oldest , A.DOB
FROM test_tbl A
left Join test_tbl B
ON B.child = A.parent
Step-2
while loop till no diff between prev_df and curr_df. I am using except to find diff.
select A.parent, A.child
,CASE WHEN A.DOB < B.DOB THEN A.oldest
WHEN A.DOB > B.DOB THEN B.oldest
ELSE A.parent
END AS oldest , A.DOB
FROM crp_temp_rdm_uat7.fac_loop_1 A
left Join crp_temp_rdm_uat7.fac_loop_1 B
ON B.child = A.parent;