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/