Python 3 中 Pyspark 的 takeOrdered 键错误
Posted
技术标签:
【中文标题】Python 3 中 Pyspark 的 takeOrdered 键错误【英文标题】:takeOrdered key error with Pyspark in Python 3 【发布时间】:2015-07-26 05:41:10 【问题描述】:我在 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)
有人遇到同样的错误吗?还是我错过了什么? 谢谢
【问题讨论】:
【参考方案1】:是你的lamba函数导致了错误。
这是因为您使用的是 Python 3。在 Python 3 中删除了元组参数解包。请参阅 Docs here
您可以手动解包元组:
sc.parallelize([("a", 10), ("c", 5), ("b", 7)]).takeOrdered(3, key=lambda kv: -kv[1])
【讨论】:
感谢这项工作。跟进:在您的第一个示例代码中,在将元组传递给同一行中的 lambda 之前,您将如何先解包它?以上是关于Python 3 中 Pyspark 的 takeOrdered 键错误的主要内容,如果未能解决你的问题,请参考以下文章
如何从 pyspark.sql.function 中提取值?