当我试图获得前三个元素时,它可以正常工作,但按相反的顺序,它不起作用
angular.module('app')
.run(['$state', '$cookies', '$rootScope', function($state, $cookies, $rootScope) {
$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
$rootScope.tabName = fromState.name;
});
});
以上陈述可以正常使用
当试图吼叫它出错了
sc.textFile("/user/sachinkerala6174/inData/movieStat").takeOrdered(3)
输入数据
sc.textFile("/user/sachinkerala6174/inData/movieStat").takeOrdered(3,key=lambda x: -x)
将错误抛出
196 5 3 881250949
186 5 3 891717742
22 1 1 878887116
244 1 2 880606923
166 3 1 886397596
298 4 4 884182806
115 2 2 881171488
253 4 5 891628467
305 4 3 886324817
6 4 3 883603013
62 2 2 879372434
286 1 5 879781125
200 2 5 876042340
210 4 3 891035994
224 2 3 888104457
303 5 3 879485318
122 3 5 879270459
194 2 2 879539794
答案 0 :(得分:1)
您的代码失败,因为lambda函数试图计算字符串的负值。在PySpark中(与Scala和Java不同),没有方法可以反转TakeByOrdered
的排序顺序,但是,您可以通过使用zipWithIndex为每个输入行添加行号来实现相同的目的。这将为您提供以下输出格式:
[('196 5 3 881250949', 0), ('186 5 3 891717742', 1), ....]
然后,您可以使用长索引作为排序键,允许您获取输入文件的最后三行:
lastLines = sc.textFile("/user/sachinkerala6174/inData/movieStat").
zipWithIndex().takeOrdered(3,key=lambda x:-x[1])
使用map
,您只能返回最后三行:
map(lambda x:x[0], lastLines)