当我试着得到前3个元素时,它工作得很好,但按相反的顺序它不工作
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
将错误作为
File "/usr/lib64/python2.7/heapq.py", line 427, in nsmallest
result = _nsmallest(n, it)
File "<stdin>", line 1, in <lambda>
TypeError: bad operand type for unary -: 'unicode'
1条答案
按热度按时间o3imoua41#
当lambda函数试图计算字符串的负值时,代码失败。在pyspark中(与scala和java不同),没有方法反转
TakeByOrdered
但是,您可以通过使用zipwithindex向每个输入行添加行号来实现相同的目的。这将为您提供以下输出格式:然后,您可以使用long索引作为排序键,以便获取输入文件的最后三行:
使用
map
然后您只能返回最后三行: