Как рассчитать количество слов на строку в pyspark - PullRequest
2 голосов
/ 11 марта 2020

Я попробовал это:

rdd1= sc.parallelize(["Let's have some fun.",
  "To have fun you don't need any plans."])
output = rdd1.map(lambda t: t.split(" ")).map(lambda lists: (lists, len(lists)))
output.foreach(print)

вывод:

(["Let's", 'have', 'some', 'fun.'], 4)
(['To', 'have', 'fun', 'you', "don't", 'need', 'any', 'plans.'], 8)

и я получил общее количество слов в линия. но я хотел подсчитать каждое слово в строке.

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Вы можете попробовать это:

from collections import Counter 

output = rdd1.map(lambda t: t.split(" ")).map(lambda lists: dict(Counter(lists)))

Я приведу небольшой python пример:

from collections import Counter

example_1 = "Let's have some fun."
Counter(example_1.split(" "))
# [{"Let's": 1, 'have': 1, 'some': 1, 'fun.': 1}

example_2 = "To have fun you don't need any plans."
Counter(example_2.split(" "))
# {'To': 1, 'have': 1, 'fun': 1, 'you': 1, "don't": 1, 'need': 1, 'any': 1, 'plans.': 1}]
1 голос
/ 11 марта 2020

Исходя из вашего ввода и из того, что я понимаю, пожалуйста, найдите ниже код. Просто незначительные изменения в вашем коде:

output = rdd1.flatMap(lambda t: t.split(" ")).map(lambda lists: (lists, 1)).reduceByKey(lambda x,y : x+y)  

Вы использовали map для разделения данных. Вместо этого используйте flatMap. Это разобьет вашу строку на слова. Выход PFB:

output.collect()

[('have', 2), ("Let's", 1), ('To', 1), ('you', 1), ('need', 1), ('fun', 1), ("don't", 1), ('any', 1), ('some', 1), ('fun.', 1), ('plans.', 1)]
...