我想根据金额字段对列组进行排名。对于组合字段(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
答案 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}'