spark笔记3

RDD缓存

package cn.tedu.cache

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.storage.StorageLevel

object Driver {
def main(args: Array[String]): Unit = {
val conf=new SparkConf().setMaster(“local”).setAppName(“cache”)
val sc=new SparkContext(conf)
//–指定检查点目录路径
//–可以是本地路径或HDFS
sc.setCheckpointDir(“c://data/check”)

val data=sc.textFile("c://data/topk.txt", 2)
//--习惯上,将数据源RDD做缓存,避免数据恢复到源头去磁盘读取。
//--RDD的缓存指的是:显式的将RDD数据持久化到内存或磁盘上,不会被GC所回收掉
data.cache()

val r1=data.flatMap{_.split(" ")}
val r2=r1.map{(_,1)}
//--persist()的缓存级别同cache(),都是默认的memory_only
//--此外,也可以用persist()指定其他级别
//--根据经验,一般会将整个计算链处于中间位置的RDD缓存
//--如果一个计算链很长,比如30个,可以比如每个10个缓存一下
r2.persist(StorageLevel.MEMORY_AND_DISK)
//--将r2做检查点存储
r2.checkpoint()
val r3=r2.reduceByKey{_+_}
r3.foreach{println} 
//--当整个Job执行完之后,一定要记得清除RDD的缓存
data.unpersist()
r3.unpersist()

}
}

倒排索引创建

数据 一个目录下有三个文件 文件里面的内容有相识的部分,求相识的部分都在哪些文件里出现过
package cn.tedu.inverted
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object Driver {
def main(args: Array[String]): Unit = {
val conf=new SparkConf().setMaster(“local”).setAppName(“inverted”)
val sc=new SparkContext(conf)
//–将指定目录下所有文件数据读取到一个RDD中
//–RDD[(filePath,fileText)]
//–课后作业:完成倒排索引表
//–(scala,doc3) (hadoop,doc1,doc2)
//–提示:文档名从filePath获取
//–单词从fileText中获取,先按\r\n 把每行数据切出来,在按空格将每行数据的单词切分
val data=sc.wholeTextFiles(“c://data/inverted/*”)
//–RDD[(filePath,fileText)]->RDD[(fileName,fileText)]
val r1=data.map{case(filePath,fileText)=>
val fileName=filePath.split("/").last.dropRight(4)
(fileName,fileText)
}
//–RDD[(fileName,fileText)]->RDD[(word,fileName)]
val r2=r1.flatMap{case(fileName,fileText)=>
fileText.split("\r\n").flatMap{ line => line.split(" “) }
.map {word =>(word,fileName) }
}
val r3=r2.groupByKey.map { case(word,buffer) =>
(word,buffer.toList.distinct.mkString(”,")) }
r3.foreach{println}
}
}

排序

源数据
aa 12
bb 32
aa 3
cc 43
dd 23
cc 5
cc 8
bb 33
bb 12
按照第一列做升序,按照第二列做降序

创建对象
package cn.tedu.ssort
/**

  • 用于封装文件中两列数据,并实现二次排序的比较规则
    /
    class Ssort(val col1:String, val col2:Int) extends Ordered[Ssort] with Serializable{
    /

    • compare用于定义排序比较规则
      */
      def compare(that: Ssort): Int = {
      //–先按第一列做升序排序
      val result=this.col1.compareTo(that.col1)
      if(result==0){
      //–再按第二列做降序排序
      that.col2.compareTo(this.col2)

    }else{
    result
    }
    }
    }

入口代码
package cn.tedu.ssort
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object Driver {
def main(args: Array[String]): Unit = {
val conf=new SparkConf().setMaster(“local”).setAppName(“ssort”)

val sc=new SparkContext(conf)

val data=sc.textFile("c://data/ssort.txt")

//--RDD[String:line]->RDD[(Ssort(col1,col2),line)]->sortByKey,
//--会按Ssort对象中的compare排序
val r1=data.map { line =>
  val info=line.split(" ") 
  val col1=info(0)
  val col2=info(1).toInt
  (new Ssort(col1,col2),line)
}
//--true表示按Ssort对象中Compare的规则排序
//--false表示按Compare中的规则反排序
val r2=r1.sortByKey(true).map{x=>x._2}
r2.foreach{println}

}
}

<think>好的,用户需要查找关于Apache Spark的学习笔记和资料教程。首先,我需要整理已有的引用信息,看看哪些资源可以直接推荐。根据提供的引用,有四个相关的资料: 1. 引用[1]是Spark官方文档的中文版,项目地址明确,适合作为权威参考。 2. 引用[2]是一本深入学习的教程,覆盖多个领域,适合进阶学习。 3. 引用[3]和[4]是入门笔记,解释了Spark的基本概念和与Hadoop的区别,适合初学者。 接下来,用户可能希望了解这些资源的具体内容和如何获取。需要确保每个推荐的资料都有清晰的描述和链接。例如,官方文档的中文版对中文用户非常友好,而GitCode的地址需要检查是否正确有效。此外,提到的Spark与Hadoop的差异是一个常见问题,引用[4]中的内容可以解答这一点,应该强调。 用户可能还关心学习路径,是否需要从入门到精通的资料。因此,分层次推荐资料会更好,比如先官方文档和入门笔记,再深入学习教程。同时,是否需要补充其他资源?但根据现有引用,这四个已经涵盖了从基础到应用的不同方面,暂时足够。 另外,用户的问题中提到“学习笔记”,所以引用[3]和[4]作为笔记类内容应该优先提到。同时,可能用户需要实践方面的指导,比如代码示例,但现有引用中没有提到具体代码,可能需要说明这些资料更侧重概念和理论。 最后,检查是否有遗漏的信息,比如项目地址是否正确,是否有访问权限问题。引用[1]的GitCode链接需要确认是否存在,但根据提供的信息,应该没问题。总结来说,回答应结构清晰,分点推荐,并简要说明每个资源的特点和适用阶段,方便用户选择。</think>根据您的需求,为您整理以下 Apache Spark 学习资源(按学习阶段分类): ### 一、基础入门资料 1. **Spark核心特性解析** - Spark与Hadoop的核心差异在于**内存计算机制**,通过减少磁盘I/O提升性能(如Shuffle过程优化)[^4] - 支持多种计算模式:批处理、流处理、机器学习、图计算[^2] - 提供Scala/Java/Python/R四种API接口[^3] 2. **官方权威文档** - 《Apache Spark 官方文档中文版》[^1] - 特点:完整体系结构解析 + 配置参数详解 + 代码示例 - 获取:GitCode镜像库 https://gitcode.com/gh_mirrors/sp/spark-duc-zh ### 二、进阶学习路径 3. **系统化学习教程** - 《深入学习 Apache Spark:从入门到精通》[^2] - 涵盖内容: ```markdown 1. RDD编程模型原理 2. Spark SQL优化技巧 3. Structured Streaming实时处理 4. MLlib机器学习实战 ``` 4. **架构设计精要** - 驱动程序-执行器架构 - DAG调度器的工作流程 - 内存管理策略(Tungsten优化) ### 三、实践指导资源 5. **开发者笔记精选** - 《Spark学习笔记》系列: ```python # 典型WordCount示例 text_file = sc.textFile("hdfs://...") counts = text_file.flatMap(lambda line: line.split(" ")) \ .map(lambda word: (word, 1)) \ .reduceByKey(lambda a, b: a + b) ``` - 集群部署实践:Standalone/YARN/Mesos模式对比 6. **性能调优手册** - 常见优化策略: ```markdown - 并行度设置公式:$$ partitions = \frac{total\_cores}{executor\_instances} $$ - 内存分配黄金比例:Storage/Execution内存占比 - Shuffle参数优化指南 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值