如何使用 hive 或 pig 将行数据制作成 source 和 target zigzag

how to make row data to source and target zigzag using hive or pig

输入

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

我想根据以下输出将名称列设为源和目标。 之前我尝试过 pig

步骤是:

a=load-->b=asc->c=dec -> 然后加入数据

我得到了这样的输出

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

输出

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

在 Hive(和 Spark)中,您可以使用 Window 函数 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 

应该给你输出:

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