计算具有多列的行的等级 - scala

时间:2015-12-17 21:02:39

标签: scala apache-spark

我想根据金额字段对列组进行排名。对于组合字段(Nbr,TypeCd)的相同值,等级应该相同。这需要在scala中,spark和scala版本分别为1.3和2.10。在scala中需要所需的代码。

示例输入数据:

Id  Nbr    TypeCd   Amt
a1  2010    online  25
a2  2010    online  25
a3  2010    online  15
a4  2011    store   100
a5  2011    store   50
a4  2011    store   90
a6  2011    store   90
a7  2011    store   90

示例输出数据

Id      Nbr    TypeCd   Amt Rank
a1  2010       online   25  1
a2  2010       online   25  1
a3  2010       online   15  3
a4  2011       store    100 1
a5  2011       store    50  5
a4  2011       store    90  2
a6  2011       store    90  2
a7  2011       store    90  2

1 个答案:

答案 0 :(得分:0)

这不是最佳答案,但考虑到你的限制,我会做这样的事情:

def assignRank(inputList : List[(String, Int, String, Int)]) : List[(String, Int, String, Int, Int)] = 
{
    var rank = 1;
    var prevAmt = 0;
    var elementPosition = 1;
    var outputList = List[(String, Int, String, Int, Int)]();
    for(element <-  inputList)
    {
        // Check if the Current Amount is lesser than Previous one
        if(element._4 != prevAmt)
        {
            rank = elementPosition
        }

        outputList = outputList ::: List((element._1, element._2, element._3, element._4 , rank))
        prevAmt = element._4
        elementPosition = elementPosition + 1
    }

    return outputList
}

在assignRank中,只需浏览子组中所有元素的列表,并按如下方式分配排名:

'/search?{param1}{param2}{param3}....{param50}'