Как я могу поместить диапазон в функцию «Фильтр» в pyspark? - PullRequest
0 голосов
/ 25 апреля 2018

Я работал над кодом ниже и заметил, что моя функция не показывает ожидаемый результат: Итак, команда 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)

1 Ответ

0 голосов
/ 25 апреля 2018

В преобразовании фильтра попробуйте ниже:

filter(lambda x: int(x)<=94)

Обновление (пример кода):

from operator import add

text = ['1 2 3 4 1 23 5 5 43 54']
textFile = sc.parallelize(text)
counts = textFile.flatMap(lambda x: x.split(' '))\
    .filter(lambda x: int(x) <= 5)\
    .map(lambda x: (x, 1))\
    .reduceByKey(add)

output = counts.collect()

for (word, count) in output:
    print("%s: %i" % (word, count))

4: 1
3: 1
1: 2
5: 2
2: 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...