光之使者 发表于 2024-6-22 22:59:45

Spark的性能调优——RDD

https://img-blog.csdnimg.cn/direct/d7e6f5b961814bd3b1ea069063343220.png
前言

RDD 是 Spark 对于分布式数据集的抽象,每一个 RDD 都代表着一种分布式数据形态。比如 lineRDD,它表现数据在集群中以行(Line)的形式存在;而 wordRDD 则意味着数据的形态是单词,分布在盘算集群中。 

https://img-blog.csdnimg.cn/direct/c4897c4ad3de438b83b2fcb96bb2fd04.png

参数

参数是函数、或者返回值是函数的函数,我们把这类函数统称为“高阶函数”(Higher-order Functions)。换句话说,这 4 个算子,都是高阶函数。 
https://img-blog.csdnimg.cn/direct/19abed9498884cc9b2e1e96c30b17abe.png
 https://img-blog.csdnimg.cn/direct/3434a6ae370541ebbc5df8137bdb5b57.png
import org.apache.spark.rdd.RDD
val rootPath: String = _
val file: String = s"${rootPath}/wikiOfSpark.txt"
// 读取文件内容
val lineRDD: RDD = spark.sparkContext.textFile(file)
// 以行为单位做分词
val wordRDD: RDD = lineRDD.flatMap(line => line.split(" "))
val cleanWordRDD: RDD = wordRDD.filter(word => !word.equals(""))
// 把RDD元素转换为(Key,Value)的形式
val kvRDD: RDD[(String, Int)] = cleanWordRDD.map(word => (word, 1))
// 按照单词做分组计数
val wordCounts: RDD[(String, Int)] = kvRDD.reduceByKey((x, y) => x + y)
// 打印词频最高的5个词汇
wordCounts.map{case (k, v) => (v, k)}.sortByKey(false).take(5)  
在 RDD 的编程模子中,一共有两种算子,Transformations 类算子和 Actions 类算子。开辟者必要使用 Transformations 类算子,界说并描述数据形态的转换过程,然后调用 Actions 类算子,将盘算效果收集起来、或是物化到磁盘。
换句话说,开辟者调用的各类 Transformations 算子,并不立即执行盘算,当且仅当开辟者调用 Actions 算子时,之前调用的转换算子才会付诸执行。在业内,这样的盘算模式有个专门的术语,叫作“延迟盘算”(Lazy Evaluation)。延迟盘算很好地解释了本讲开头的题目:为什么 Word Count 在执行的过程中,只有最后一行代码会花费很长时间,而前面的代码都是瞬间执行完毕的呢?
https://img-blog.csdnimg.cn/direct/69cf59f8ee4549f78e3184ad7f0ac0f3.png

https://img-blog.csdnimg.cn/direct/e7621a2ec22145c490c56481916148c8.png 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Spark的性能调优——RDD