Spark - 字数统计测试

时间:2015-01-16 02:57:12

标签: python count mapreduce apache-spark pyspark

我只想计算spark(pyspark)中的单词,但我可以映射字母或整个字符串。

我试过了: (整个字符串)

v1='Hi hi hi bye bye bye word count' 
v1_temp=sc.parallelize([v1]) 
v1_map = v1_temp.flatMap(lambda x: x.split('\t'))
v1_counts = v1_map.map(lambda x: (x, 1))
v1_counts.collect()  

或(只是字母)

v1='Hi hi hi bye bye bye word count'
v1_temp=sc.parallelize(v1)
v1_map = v1_temp.flatMap(lambda x: x.split('\t'))
v1_counts = v1_map.map(lambda x: (x, 1))
v1_counts.collect()

3 个答案:

答案 0 :(得分:4)

执行sc.parallelize(sequence)时,您正在创建一个将并行操作的RDD。在第一种情况下,序列是包含单个元素(整个句子)的列表。在第二种情况下,你的序列是一个字符串,在python中类似于一个字符列表。

如果你想并行计算单词,你可以这样做:

from operator import add

s = 'Hi hi hi bye bye bye word count' 
seq = s.split()   # ['Hi', 'hi', 'hi', 'bye', 'bye', 'bye', 'word', 'count']
sc.parallelize(seq)\
  .map(lambda word: (word, 1))\
  .reduceByKey(add)\
  .collect()

会得到你:

[('count', 1), ('word', 1), ('bye', 3), ('hi', 2), ('Hi', 1)]

答案 1 :(得分:2)

如果您只想计算字母数字,这可能是一个解决方案:

[ 708, 784, 1495, 212, 1918, 2007, 1439, 1634, 649 ] 

答案 2 :(得分:1)

有许多版本的wordcount在线,下面只是他们的一部分;

#to count the words in a file hdfs:/// of file:/// or localfile "./samplefile.txt"
rdd=sc.textFile(filename)

#or you can initialize with your list
v1='Hi hi hi bye bye bye word count' 
rdd=sc.parallelize([v1])


wordcounts=rdd.flatMap(lambda l: l.split(' ')) \
        .map(lambda w:(w,1)) \
        .reduceByKey(lambda a,b:a+b) \
        .map(lambda (a,b):(b,a)) \
        .sortByKey(ascending=False)

output = wordcounts.collect()

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