Python 3 中 Pyspark 的 takeOrdered 键错误
takeOrdered key error with Pyspark in Python 3
我在 PySpark 中使用 Python 3.4.2 和 Spark 1.4.1 时遇到 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)
有人遇到同样的错误吗?或者我错过了什么?
谢谢
是您的 lamba 函数导致了错误。
这是因为您正在使用 Python 3. python 中删除了元组参数解包 3. 请参阅文档 here
您可以手动解压元组:
sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda kv: -kv[1])
我在 PySpark 中使用 Python 3.4.2 和 Spark 1.4.1 时遇到 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)
有人遇到同样的错误吗?或者我错过了什么? 谢谢
是您的 lamba 函数导致了错误。
这是因为您正在使用 Python 3. python 中删除了元组参数解包 3. 请参阅文档 here
您可以手动解压元组:
sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda kv: -kv[1])