使用Python的文件中的单词频率
我正在尝试使用python程序计算字数使用Python的文件中的单词频率,python,pyspark,word-count,Python,Pyspark,Word Count,我正在尝试使用python程序计算字数 from pyspark import SparkContext sc = SparkContext(appName="Words") lines = sc.textFile(sys.argv[1], 1) counts=dict() words = lines.split(" ") for word in words: if word in counts: counts[word] += 1 else:
from pyspark import SparkContext
sc = SparkContext(appName="Words")
lines = sc.textFile(sys.argv[1], 1)
counts=dict()
words = lines.split(" ")
for word in words:
if word in counts:
counts[word] += 1
else:
counts[word] = 1
output = counts.collect()
for (word, count) in output:
print "%s: %i" % (word, count)
sc.stop()
这并没有给我想要的输出。这段代码有什么改进吗?看起来你把python和spark混为一谈了 当您使用读取文件时,将得到字符串的RDD。从a到a引用我自己的话: 您要执行的所有操作都在RDD的内容上, 文件的元素。在RDD上调用
split()
因为split()
是一个字符串函数。你想做什么
而是调用split()
和对每条记录(行)的其他操作
在RDD的文件中)。这正是map()
所做的
下面是如何使用pySpark修改代码以计算单词频率
首先,我们将把每行中的每个单词w
映射成(w,1)
形式的元组。然后我们将调用reduceByKey()
,并为每个单词添加计数
例如,如果该行是“快速棕色狐狸跳过懒狗”
,则映射步骤会将该行变成:
[('The',1),('quick',1),('brown',1),('fox',1),('jumps',1),('over',1),
('the',1),('lazy',1),('dog',1)]
由于这将返回一个元组列表,因此我们将调用,以便将每个元组视为唯一的记录。这里需要考虑的另一件事是,您是否希望计数区分大小写,以及是否需要删除任何标点符号或特殊字符
在flatMap()
之后,我们可以调用它,它使用相同的键(在本例中为单词)收集所有元组,并对值应用reduce函数(在本例中为operator.add()
)
从pyspark导入SparkContext
从操作员导入添加
sc=SparkContext(appName=“Words”)
lines=sc.textFile(sys.argv[1],1)#这是一个RDD
#counts是一个rdd,其形式为(word,count)
counts=lines.flatMap(λx:[(w.lower(),1)表示x.split()中的w])。reduceByKey(add)
#collect将其带到本地内存中的列表中
输出=计数。收集()
对于输出中的(字、计数):
打印“%s:%i”%(字,计数)
sc.stop()#停止spark上下文
看起来你把python和spark混为一谈了
当您使用读取文件时,将得到字符串的RDD。从a到a引用我自己的话:
您要执行的所有操作都在RDD的内容上,
文件的元素。在RDD上调用split()
因为split()
是一个字符串函数。你想做什么
而是调用split()
和对每条记录(行)的其他操作
在RDD的文件中)。这正是map()
所做的
下面是如何使用pySpark修改代码以计算单词频率
首先,我们将把每行中的每个单词w
映射成(w,1)
形式的元组。然后我们将调用reduceByKey()
,并为每个单词添加计数
例如,如果该行是“快速棕色狐狸跳过懒狗”
,则映射步骤会将该行变成:
[('The',1),('quick',1),('brown',1),('fox',1),('jumps',1),('over',1),
('the',1),('lazy',1),('dog',1)]
由于这将返回一个元组列表,因此我们将调用,以便将每个元组视为唯一的记录。这里需要考虑的另一件事是,您是否希望计数区分大小写,以及是否需要删除任何标点符号或特殊字符
在flatMap()
之后,我们可以调用它,它使用相同的键(在本例中为单词)收集所有元组,并对值应用reduce函数(在本例中为operator.add()
)
从pyspark导入SparkContext
从操作员导入添加
sc=SparkContext(appName=“Words”)
lines=sc.textFile(sys.argv[1],1)#这是一个RDD
#counts是一个rdd,其形式为(word,count)
counts=lines.flatMap(λx:[(w.lower(),1)表示x.split()中的w])。reduceByKey(add)
#collect将其带到本地内存中的列表中
输出=计数。收集()
对于输出中的(字、计数):
打印“%s:%i”%(字,计数)
sc.stop()#停止spark上下文
请在您的问题中包括所需和实际的输出。您的问题不是关于python的,它似乎是一个Pypark问题。当您执行words=lines.split(“”
)时,您应该会遇到语法错误。dict
没有collect
方法。请在问题中包含所需的和实际的输出。您的问题不是关于python的-它似乎是一个Pypark问题。执行words=lines.split(“”
)操作时应该会出现语法错误。dict
没有collect
方法。