我认为我的问题微不足道,但我是 Pig 的新手,我在文档中看不到明显的答案。我有两个时间序列要合并。假设其中一个只是X
的事件流:
100 A
200 B
300 C
400 D
500 E
600 F
然后另一个指示何时发生某些状态更改,称之为 Y
.
50 on
250 off
350 on
450 off
我想用 Y
中的当前on/off
状态标记第一个时间序列X
。所以具体我想要:
100 A on
200 B on
300 C off
400 D on
500 E off
600 F off
如果我用另一种语言写这篇文章,我可能会做一些事情,比如合并排序X
和Y
,然后一次性遍历它,记住最后的on/off
状态并标记X
条目。
在 Pig 中做到这一点的最佳方法是什么?我收到了一些现有的代码,它使用X
和Y
JOIN
然后过滤它,但我认为由连接引起的数据膨胀是不必要的。
我认为
没有一个简单的解决方案。下面是一些伪代码:
X1 = Rank X;
Y1 = Rank Y;
XY = JOIN X1 BY BY $0 LEFT OUTER, Y1 BY $0;
SPLIT XY INTO status_known IF status is not null, status_unknown OTHERWISE;
--Y2: Find out last status in Y1 (with Group all, max)
--Y3: Cross status_unknown with Y2
UNION status_known and Y3