【Spark入门项目】词频统计

项目要求

要求统计txt英文文件中每个单词出现的次数。txt文件内随机拷贝英文内容,如下

The scientists re-analysed a sample collected by NASA astronauts during the 1972 Apollo mission.
What they found suggests large portions of the crust were formed at temperatures in excess of 2,300 degrees Celsius, which they say, could have been achieved by the melting of the outer layer.
These temperatures are incredibly high and suggest a terrific impact helped not only to destroy the lunar surface, but to build it. The idea overturns previous theories that colliding asteroids and comets were a purely destructive process with the lunar crust being created by magmas rising from the interior.

流程

  1. 初始化spark配置
  2. 通过textFile方法读取文件夹内的所有txt文件
  3. RDD的每一个元素为txt文件中的一行,通过flatMap方法(flatMap方法可以返回一个序列,普通的map方法返回一个元素)将每一行按空格分割,并将该行的所有词按Key-value的形式返回。
  4. 通过reduceByKey 将所有相同键值的词聚合在一起,聚合函数为lambda x, y: x+y即对集合内的两两元素相加。
  5. 通过sortBy将按频率排序,lambda x: x[1]表示key-value的第二个值即value
from pyspark import SparkContext, SparkConf

def split(x):
    words = x.split()
    return [(word, 1) for word in words]

# set sparkcontext
conf = SparkConf().setMaster("local[*]").setAppName("My App")
sc = SparkContext(conf=conf)
sc.setLogLevel("ERROR")

rdd = sc.textFile('words.txt')
words = rdd.flatMap(split)
count = words.reduceByKey(lambda x, y: x+y).sortBy(lambda x: x[1],
                                                   ascending=False)
count.foreach(print)
# stop spark
sc.stop()
Spark Streaming是一个用于处理实时数据流的模块,它是在Apache Spark框架下提供的。要想利用Spark Streaming实现词频统计,你需要遵循以下步骤: 1. **设置环境**:首先,确保你已经安装了Spark和相关的Scala、Python或Java库。 2. **创建DataStream**:从数据源(如Kafka、Socket接收、文件系统等)创建一个`DataStream`实例。例如,如果你的数据来自Kafka,可以使用`ssc.kafkaStream()`函数。 ```python from pyspark.sql import SparkSession sc = SparkContext() ssc = StreamingContext(sc, batchDuration) lines = ssc.socketTextStream(host, port) ``` 3. **数据预处理**:对实时输入进行清洗和解析,将其转换成适合词频统计的形式,通常是将每一行拆分成单词列表。 4. **分词**:使用`flatMap()`操作将字符串分割成单词列表。 ```python words = lines.flatMap(lambda line: line.split()) ``` 5. **去除停用词和标点**:如果需要,可以过滤掉常见的停止词和标点符号。 6. **计数**:使用`mapToPair()`将每个单词映射到一个`(word, 1)`键值对,然后使用`reduceByKey()`操作累加每个单词的计数。 ```python pairs = words.mapToPair(lambda x: (x, 1)).reduceByKey(lambda a, b: a + b) ``` 7. **结果展示**:最后,将结果持久化到存储系统(如HDFS)或者显示给用户。可以每批处理周期结束后,收集并打印出当前的词频统计结果。 ```python freqs = pairs.transform(lambda rdd: rdd.sortBy(lambda kv: kv[1], ascending=False)) freqs.pprint() ``` 8. **启动和运行**:调用`ssc.start()`开始处理数据流,直到`ssc.stop(stopSparkContext=True, stopGracefully=True)`手动停止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值