蟒蛇火花λ函数"nameError: name 'x' is not defined" .我做错了什么?



我需要将一个位置的值除以另一个位置的值才能得到学校的录取率。 我在最后一行的 lambda 函数导致了问题。我不明白如果x在函数内,为什么需要定义它。 我该怎么做才能按申请划分接受

from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local").setAppName("accptRates")
sc = SparkContext(conf = conf)
lines = sc.textFile("file:/schoolData.csv")
def parseLine(line):
fields = line.split(",")
name = fields[0]
private = fields[1]
apps = int(fields[2])
accept = int(fields[3])
return (name, private, apps, accept)
extheader = lines.first() #extract header
header=sc.parallelize([extheader])
schools = lines.subtract(header) #filter out header
rdd = schools.map(parseLine)
private = rdd.filter(lambda x: "Yes" in x[1])
rates = private.map(lambda x: x[0], (x[3]/x[2])).take(10)

Traceback (most recent call last):
File "C:/accptRates.py", line 23, in <module>
rates = private.map(lambda x: x[0], (x[3]/x[2])).take(10)
NameError: name 'x' is not defined

当有逗号时,lambda 函数的定义结束,因此:

private.map(lambda x: x[0], (x[3]/x[2]))

真的等同于:

private.map((lambda x: x[0]), (x[3]/x[2]))

这使得x[3]/x[2]中的x未定义。

如果所述lambda函数旨在返回元组,则应在逗号分隔的表达式两边放置括号:

private.map(lambda x: (x[0], x[3] / x[2]))

最新更新