PySpark中的takeOrdered函数在使用Python 3.4.2和Spark 1.4.1时出现了一个错误,该函数应该支持python3。

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

此错误仅在使用Python3时发生。它在Python2.7中工作得非常好。
另外,作为比较,这一行代码在Python3中运行得非常好:
sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda (k,v): -v)

有人犯同样的错误吗?还是我遗漏了什么?
谢谢

最佳答案

是您的lamba函数导致了错误。
这是因为您正在使用Python 3。在python 3中删除了元组参数解包。参见文档here
可以手动解压缩元组:

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

关于python - Python 3中Pyspark的takeOrdered键错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31634034/

10-09 23:32