【发布时间】:2015-12-19 07:08:10
【问题描述】:
我想根据金额字段对一组列进行排名。对于组合字段(Nbr,TypeCd)的相同值,rank应该相同。这需要在 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
【问题讨论】:
-
你能详细描述一下排序的标准吗?我可以在示例中看到 a1 和 a4 具有不同的 Nbr 和 TypeCd 仍然具有相同的等级。您想计算 Nbr 和 TypeCd 子组中的排名吗?
-
如果不转换为 RDD,在 1.3 中是无法实现的。
-
感谢 zero323 的回复。我可以转换为 RDD。我查看了stackoverflow.com/questions/33729787/computing-rank-of-a-row/…,这是基于一个字段的,我需要使用多个字段,例如本例中的 Nbr 和 TypeCd。非常感谢您的帮助。
-
老实说,升级到 >= 1.4 会更有意义。基于 RDD 的代码不能很好地概括,我为链接问题提供的代码是解决不同的问题(缺少
PARTITION BY clause)。 -
在 1.5 中,有窗口函数,但在 1.3 中,我不能使用它们。这就是我尝试使用 RDD 实现的目标。
标签: scala apache-spark