如何计算pyspark中每行的字数
Posted
技术标签:
【中文标题】如何计算pyspark中每行的字数【英文标题】:How to calculate the count of words per line in pyspark 【发布时间】:2020-03-11 05:41:42 【问题描述】:我试过了:
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)
我得到了每行单词的总数。但我想要每行每个单词的计数。
【问题讨论】:
你想要单词的数量和出现次数吗? 【参考方案1】:你可以试试这个:
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]
【讨论】:
【参考方案2】:根据您的输入和我的理解,请找到以下代码。只需对您的代码进行细微更改:
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)]
【讨论】:
以上是关于如何计算pyspark中每行的字数的主要内容,如果未能解决你的问题,请参考以下文章
计算每行并在 DataFrame PySpark 中添加新列 - 更好的解决方案?