python Искристая лямбда-функция "nameError: имя 'x' не определено". Что я делаю неправильно? - PullRequest
1 голос
/ 09 февраля 2020

Мне нужно поделить значение в одной позиции на значение в другой, чтобы получить уровень принятия школы. Моя лямбда-функция в последней строке вызывает проблему. Я не понимаю, почему 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

1 Ответ

0 голосов
/ 09 февраля 2020

Определение лямбда-функции заканчивается, когда есть запятая, поэтому:

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

действительно эквивалентно:

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

, что делает x в x[3]/x[2] undefined.

Если указанная лямбда-функция предназначена для возврата кортежа, вы должны поместить скобки вокруг выражений, разделенных запятыми:

private.map(lambda x: (x[0], x[3] / x[2]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...