我的要求是得到最大数量的减少值
下面是我的输入数据集:
+---+-------+
| id| amount|
+---+-------+
| 1| 10.0|
| 1| 9.0|
| 1| 7.0|
| 1| 6.0|
| 2| 50.0|
| 2| 60.0|
| 2| 70.0|
| 3| 90.0|
| 3| 80.0|
| 3| 90.0|
+---+-------+
我要求的结果如下:
+---+--------+
| id| outcome|
+---+--------+
| 1| 3|
| 2| 0|
| 3| 2|
+---+--------+
我的结果(新列)基于groupby id和值连续减少3次的次数。对于id 1,即使它减少了4倍,我只希望最多3倍。
如有任何建议或帮助,请使用spark sql或spark dataframe(scala)。
2条答案
按热度按时间e0bqpujr1#
首先需要一个排序列来计算减少量。在你的例子中没有,所以我们可以建立一个
index
带的列monotonically_increasing_id
. 然后,我们可以用Windows和Windowslag
以及lead
获取所需功能:6za6bjd02#
下面是一个使用
pyspark
您可以尝试在scala或sql中复制: