2017-09-06 13 views
0

entréecomment rendre les données de ligne de source et de cible en utilisant zigzag ruche ou porc

id,name,time 
1,home,10:20 
1,product,10:21 
1,mobile,10:22 
2,id,10:24 
2,bag,10:30 
2,home,10:21 
3,keyboard,10:32 
3,home,10:33 
3,welcome,10:36 

je veux me colonne de nom en tant que source et cible sur la base de la sortie ci-dessous. Plus tôt j'ai essayé avec pig

Les étapes sont les suivantes:

a = charge -> b = asc-> c = décembre -> puis joindre les données

la sortie que j'ai eu comme ça

(1,home,10:20,1,product,10:21) 
(2,bag,10:30,2,id,10:24) 
(3,home,10:32,3,welcome,10:36) 

sortie

1,home,product 
1,product,mobile 
2,id,bag 
2,bag,home 
3,keyboard,home 
3,home,welcome 
+3

Vous avez marqué sql, ruche, porc et étincelle. Comment envisagez-vous de l'implémenter? – philantrovert

Répondre

0

Ruches (et Spark), vous pouvez utiliser la fonction fenêtre LEAD:

with t as 
    (select id, name, lead(name) over (partition by id) as zigzag from table) 
select * from t where t.zigzag is not null 

devrait vous donner la sortie:

+---+--------+-------+ 
| id| name| zigzag| 
+---+--------+-------+ 
| 1| home|product| 
| 1| product| mobile| 
| 2|  bag| home| 
| 2| home|  id| 
| 3|keyboard| home| 
| 3| home|welcome| 
+---+--------+-------+