【hadoop学习之路】Spark-shell RDD 实现词频统计

本文通过Spark Shell演示了如何在本地文件系统上读取words.txt,使用RDD进行文本处理,包括分割、拍平、转换为键值对、聚合、相加操作,最终实现词频统计。结果显示,最常见的词包括hadoop、python等,每个词出现8次。

1. 在本地路径下创建文本文件 /test/words.txt,内容如下:

python java cpp c hello world hadoop hdfs
python java cpp c hello world hadoop hdfs
python java cpp c hello world hadoop hdfs
python java cpp c hello world hadoop hdfs
python java cpp c hello world hadoop hdfs
python java cpp c hello world hadoop hdfs
python java cpp c hello world hadoop hdfs
python java cpp c hello world hadoop hdfs

2. 运行spark-shell

spark-shell

3. 读取words.txt,使用命令:

val wc1 = sc.textFile("file:///test/words.txt")

4. 使用空格分割文本,使用命令:

val wc2 = wc1.map(item => item.split(" "))

5. 将4.中所得结果拍平,使用命令:

val wc3 = wc2.flatMap(item => item)

6. 将5.中结果转换为键值对,使用命令:

val wc4 = wc3.map(item => (item,1))

7. 将6.中结果聚合、相加,使用命令:

val wc5 = wc4.reduceByKey((curr, agg) => curr + agg)

8. 将6. 中结果收集、展示,使用命令:

<
### Spark RDD 编程教程 RDD(Resilient Distributed Dataset)是 Spark 的核心抽象之一,表示一个不可变的、分区的数据集[^4]。它可以被并行操作,并支持多种转换和动作操作。 #### 创建 RDD 可以通过两种方式创建 RDD: 1. **从外部存储加载数据**:例如 HDFS 文件或其他分布式文件系统中的文件。 2. **通过已有的 Scala 集合对象**:适用于小型测试数据集。 以下是基于 `spark-shell` 的交互式编程示例: ```scala // 加载本地文件作为 RDD val textFile = sc.textFile("file:///path/to/your/file.txt") // 使用集合创建 RDD val data = Array(1, 2, 3, 4, 5) val distData = sc.parallelize(data) // 显示前几个元素 textFile.take(5).foreach(println) distData.collect().foreach(println) ``` 上述代码展示了如何从文件或内存数组中创建 RDD 并查看其内容。 --- ### Spark Shell 交互式编程 示例 `spark-shell` 是一种快速启动 Spark 上下文的方式,适合开发人员进行调试和原型设计[^2]。以下是一个简单的交互式编程流程: #### 启动 Spark Shell 运行命令如下: ```bash bin/spark-shell ``` 这将在本地模式下启动 Spark,默认绑定地址为 `http://localhost:4040`,提供 Web UI 查看任务状态。 #### 数据处理实例 假设有一个名为 `input.txt` 的文本文件,其中每行包含若干单词。我们希望统计每个单词出现的次数。 ```scala // 读取文件并分割成单词 val lines = sc.textFile("file:///path/to/input.txt") val words = lines.flatMap(line => line.split(" ")) // 将每个单词映射为 (word, 1),然后按 key 聚合计数 val wordCounts = words.map(word => (word, 1)).reduceByKey(_ + _) // 输出结果 wordCounts.foreach(println) ``` 此代码片段实现了经典的 WordCount 功能,利用了 RDD 的 `flatMap`、`map` 和 `reduceByKey` 方法[^5]。 --- ### 关键方法解析 - **Transformation**: 如 `map`, `filter`, `flatMap`, `groupByKey`, `reduceByKey` 等用于定义计算逻辑。 - **Action**: 如 `collect`, `count`, `take`, `saveAsTextFile` 等触发实际计算。 这些方法共同构成了 Spark 中的核心编程模型。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值