Я работал над кодом ниже и заметил, что моя функция не показывает ожидаемый результат:
Итак, команда Python:
>>> counts = textFile.flatMap(lambda x: x.split(' ')) \
... .filter(lambda x : x<="94") \
... .map(lambda x: (x, 1)) \
... .reduceByKey(add)
>>> output = counts.collect()
>>> for (word, count) in output:
... print("%s: %i" % (word, count))
, поэтому приведенный выше код действительно не показывает числа меньше 94.
Я думал, что это может быть из-за "" вокруг 94, но я понял, что это не так.
Итак, я проверил, добавив еще одно число, чтобы убедиться, что он имеет диапазон, поэтому я изменил код, как показано ниже:
>>> counts = textFile.flatMap(lambda x: x.split(' ')) \
... .filter(lambda x : x<="94" and x>="60") \
... .map(lambda x: (x, 1)) \
... .reduceByKey(add)
>>> output = counts.collect()
>>> for (word, count) in output:
... print("%s: %i" % (word, count))
И теперь ответ на самом деле между 94 и 60,
Вопросы:
1) Почему первый не работает? Действительно ли оно должно быть в диапазоне от 50 до 100?
2) Итак, я знаю, что в flatmap у нас есть ключи и значения. Могу ли я просто написать что-то вроде второй строки ?,
.filter(lambda x : x<="94" and x>=x[0]) \
Спасибо
Первое обновление:
Итак, «94» - это строка, и я думал об использовании int (x), но она не сработала.
У меня есть несколько цифр, и я хочу сказать, что меньше 94 (x <= "94") </p>
Я попробовал int (x), и я получил ошибку, когда попытался сказать countts.collect ()
Я подумал или предположил, что для этого может потребоваться диапазон, поэтому я попытался использовать x [0] в качестве левой части диапазона, но все еще не работает.
Этот код работает правильно и даст мне ответ, так как я знаю, что 60 - это самое низкое число в моем примере.
>>> counts = textFile.flatMap(lambda x: x.split(' ')) \
... .filter(lambda x : x<="94" and x>="60") \
... .map(lambda x: (x, 1)) \
... .reduceByKey(add)
>>> output = counts.collect()
>>> for (word, count) in output:
... print("%s: %i" % (word, count))
Но этот код не работает должным образом и показывает все цифры (как будто нет условий):
>>> counts = textFile.flatMap(lambda x: x.split(' ')) \
... .filter(lambda x : x<="94") \
... .map(lambda x: (x, 1)) \
... .reduceByKey(add)
>>> output = counts.collect()
>>> for (word, count) in output:
... print("%s: %i" % (word, count))
второе обновление:
Ниже приведен код работы со Scala, но мне интересно про pyspark
Почему он не работает должным образом в oyspark
filter(lambda x: int(x)<=94)