我使用Python 3.4.2和Spark 1.4.1在PySpark中使用takeOrdered函数出错,它应该支持Python 3.
sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda (k,v): -v)
File "<stdin>", line 1
sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda (k,v): -v)
^
SyntaxError: invalid syntax
只有在使用Python 3时才会出现此错误。它在Python 2.7中运行得非常好。
另外,作为比较,这行代码在Python 3中运行得非常好:
sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda (k,v): -v)
有人得到同样的错误吗?或者我错过了什么? 感谢
答案 0 :(得分:4)
导致错误的是你的lamba函数。
这是因为您正在使用Python 3.在python 3中删除了元组参数解包。请参阅文档here
您可以手动解压缩元组:
sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda kv: -kv[1])