Python 3中Pyspark的takeOrdered键错误

时间:2015-07-26 05:41:11

标签: python python-3.x apache-spark pyspark

我使用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)

有人得到同样的错误吗?或者我错过了什么? 感谢

1 个答案:

答案 0 :(得分:4)

导致错误的是你的lamba函数。

这是因为您正在使用Python 3.在python 3中删除了元组参数解包。请参阅文档here

您可以手动解压缩元组:

sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda kv: -kv[1])