我基本上只是想为旅程添加一个带有唯一标识符的列。我有一张看起来与此类似的表:
Time id station newtrip
2017-11-15 16:45 100 St.George TRUE
2017-11-15 16:46 100 Bloor FALSE
2017-11-15 16:47 110 Wellesley TRUE
2017-11-15 16:48 110 Wellesley FALSE
2017-11-15 16:49 200 Dundas TRUE
2017-11-15 16:55 200 College FALSE
2017-11-15 16:56 200 Union FALSE
2017-11-15 17:51 200 Union TRUE
2017-11-15 17:52 200 St.Andrew FALSE
我想要做的就是每次最后一列显示为true时递增一个计数器。所以结果应该是这样的:
Time id station newtrip journeyID
2017-11-15 16:45 100 St.George TRUE 1
2017-11-15 16:46 100 Bloor FALSE 1
2017-11-15 16:47 110 Wellesley TRUE 2
2017-11-15 16:48 110 Wellesley FALSE 2
2017-11-15 16:49 200 Dundas TRUE 3
2017-11-15 16:55 200 College FALSE 3
2017-11-15 16:56 200 Union FALSE 3
2017-11-15 17:51 200 Union TRUE 4
2017-11-15 17:52 200 St.Andrew FALSE 4
要注意事项
通过为整个表添加row_counter(rowid)然后执行以下操作,我能够在Hortonworks Ambari VM上运行此工作:
SUM(IF(newtrip,1,0))OVER(按rowid排序)作为journeyID
但是当在AWS EMR中的集群中运行EXACT相同的代码时,添加行ID似乎会弄乱其他列的顺序,并且我搞砸了结果。
当然有一种简单的方法可以做到这一点吗?