如何计算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中每行的字数的主要内容,如果未能解决你的问题,请参考以下文章

使用pyspark计算每行数据帧中的总值

计算每行并在 DataFrame PySpark 中添加新列 - 更好的解决方案?

PySpark:如何添加数据来自查询的列(类似于每行的子查询)

python 字数pyspark

使用 pyspark 流式传输到 HBase

Pyspark:根据每行空值的数量过滤数据框