我需要将一个位置的值除以另一位置的值,以获得学校的录取率。我在最后一行的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
inx[3]/x[2]
未定义。
如果所说的lambda函数是要返回一个元组,则应在用逗号分隔的表达式两边加上括号:
private.map(lambda x: (x[0], x[3] / x[2]))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句