Spark RDD Transformation 详解---Spark学习笔记7

这篇博客详细介绍了Spark中的RDD转换操作,包括filter、map、flatMap、union、groupByKey、reduceByKey、distinct、sortByKey、join、cogroup和cartesian等,通过实例解析了每个操作的功能和用法,是Spark学习者的重要参考资料。

这几天学习了Spark RDD transformation 和 action ,做个笔记记录下心得,顺便分享给大家。

1. 启动spark-shell 

SPARK_MASTER=local[4] ./spark-shell.sh
Welcome to
      ____              __  
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 0.8.1
      /_/                  


Using Scala version 2.9.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_20)
Initializing interpreter...
14/04/04 10:49:44 INFO server.Server: jetty-7.x.y-SNAPSHOT
14/04/04 10:49:44 INFO server.AbstractConnector: Started SocketConnector@0.0.0.0:5757
Creating SparkContext...
14/04/04 10:49:50 INFO slf4j.Slf4jEventHandler: Slf4jEventHandler started
14/04/04 10:49:50 INFO spark.SparkEnv: Registering BlockManagerMaster
14/04/04 10:49:50 INFO storage.DiskBlockManager: Created local directory at /tmp/spark-local-20140404104950-5dd2

2.我们就拿根目录下的CHANGES.txt和README.txt文件做示例吧。

scala> sc
res0: org.apache.spark.SparkContext = org.apache.spark.SparkContext@5849b49d

scala> val changes = sc.textFile("CHANGES.txt")
14/04/04 10:51:39 INFO storage.MemoryStore: ensureFreeSpace(44905) called with curMem=0, maxMem=339585269
14/04/04 10:51:39 INFO storage.MemoryStore: Block broadcast_0 stored as values to memory (estimated size 43.9 KB, free 323.8 MB)
changes: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:12

scala> changes foreach println
14/04/04 10:52:03 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/04/04 10:52:03 WARN snappy.LoadSnappy: Snappy native library not loaded
14/04/04 10:52:03 INFO mapred.FileInputFormat: Total input paths to process : 1
14/04/04 10:52:03 INFO spark.SparkContext: Starting job: foreach at <console>:15
14/04/04 10:52:03 INFO scheduler.DAGScheduler: Got job 0 (foreach at <console>:15) with 1 output partitions (allowLocal=false)
14/04/04 10:52:03 INFO scheduler.DAGScheduler: Final stage: Stage 0 (foreach at <console>:15)
14/04/04 10:52:03 INFO scheduler.DAGScheduler: Parents of final stage: List()
14/04/04 10:52:03 INFO scheduler.DAGScheduler: Missing parents: List()
14/04/04 10:52:03 INFO scheduler.DAGScheduler: Submitting Stage 0 (MappedRDD[1] at textFile at <console>:12), which has no missing parents
14/04/04 10:52:03 INFO scheduler.DAGScheduler: Submitting 1 missing tasks from Stage 0 (MappedRDD[1] at textFile at <console>:12)
14/04/04 10:52:03 INFO local.LocalTaskSetManager: Size of task 0 is 1664 bytes
14/04/04 10:52:03 INFO executor.Executor: Running task ID 0
14/04/04 10:52:03 INFO storage.BlockManager: Found block broadcast_0 local
### 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 中的核心编程模型。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值