Spark学习笔记(二):RDD编程基础

  • Spark
  • 2022-07-15 17:30:48

系列博客是学习厦门大学林子雨老师spark编程基础课程的笔记,方便回顾

系列博客:

Spark学习笔记(一):Spark概述与运行原理

Spark学习笔记(二):RDD编程基础
RDD编程位置
  • RDD创建

(1)从文件中加载数据创建

调用SparkContext的textFile()

lines=sc.textFile("word.txt")
lines.foreach(print)

Spark学习笔记(二):RDD编程基础

 

(2)通过并行集合(列表)创建RDD

调用SparkContextparallelize方法

array=[1,2,3,4,5]
rdd=sc.parallelize(array)
rdd.foreach(print)

Spark学习笔记(二):RDD编程基础

  • RDD操作

转换操作(transformation)

转换得到的RDD是惰性求值的,整个转换过程只是记录了转换的路线,并不会进行真正的计算

Spark学习笔记(二):RDD编程基础

 (1) filter(func)    筛选出满足函数func的元素,并返回一个新的数据集

lines = sc.textFile("word.txt")
#筛选包含"Spark"字符串的语句
linesWithSpark = lines.filter(lambda line: "Spark" in line)
linesWithSpark.foreach(print)

Spark学习笔记(二):RDD编程基础

 

(2)map(func)   将每个元素传递到函数func中,并将结果返回为一个新的数据集

data = [1,2,3,4,5]
rdd1 = sc.parallelize(data)
#整体加上10,和python中DataFrame的map函数类似
rdd2 = rdd1.map(lambda x:x+10)
rdd2.foreach(print)

Spark学习笔记(二):RDD编程基础

 (3)flatmap(func)  

lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
words = lines.flatMap(lambda line:line.split(" "))

Spark学习笔记(二):RDD编程基础

(4) groupByKey()  应用于(K,V)键值对的数据集时,返回一个新的(K, Iterable)形式的数据集

words = sc.parallelize([("Hadoop",1),("is",1),("good",1), \
         ("Spark",1),("is",1),("fast",1),("Spark",1),("is",1),("better",1)])
words1 = words.groupByKey()
words1.foreach(print)

Spark学习笔记(二):RDD编程基础

 

5.reduceByKey(func)   应用于(K,V)键值对的数据集时,返回一个新的(K, V)形式的数据集,其中的每个值是将每个key传递到函数func中进行聚合后得到的结果

words = sc.parallelize([("Hadoop",1),("is",1),("good",1),("Spark",1), \
          ("is",1),("fast",1),("Spark",1),("is",1),("better",1)])
words1 = words.reduceByKey(lambda a,b:a+b)
words1.foreach(print)

Spark学习笔记(二):RDD编程基础

 转换函数总结:

Spark学习笔记(二):RDD编程基础

行动操作(action)

转换操作是惰性的,需要行动操作来逼它触发真正的计算

Spark学习笔记(二):RDD编程基础

行动函数:

(1)count()  返回数据集中的元素个数

(2)collect()  以数组的形式返回数据集中的所有元素

(3)first()    返回数据集中的第一个元素

(4)take()   以数组的形式返回数据集中的前n个元素

(5)reduce()  通过函数func(输入两个参数并返回一个值)聚合数据集中的元素

(6)foreach()  将数据集中的每个元素传递到函数func中运行

Spark学习笔记(二):RDD编程基础

 

  •  持久化

Spark中,RDD采用惰性求值的机制,每次遇到行动操作,都会从头开始执行计算。每次调用行动操作,都会触发一次从头开始的计算。

Spark学习笔记(二):RDD编程基础
持久化后的RDD将会被保留在计算节点的内存中被后面的行动操作重复使用

Spark学习笔记(二):RDD编程基础

持久化方法: 

  • RDD作为反序列化的对象存储于JVM中,如果内存不足,就要按照LRU原则替换缓存中的内容 
Spark学习笔记(二):RDD编程基础
persist(MEMORY_ONLY)
  • 表示将RDD作为反序列化的对象存储在JVM中,如果内存不足,超出的分区将会被存放在硬盘上
Spark学习笔记(二):RDD编程基础
persist(MEMORY_AND_DISK)
一般而言,使用cache()方法时,会调用persist(MEMORY_ONLY)
 
可以使用unpersist()方法手动地把持久化的RDD从缓存中移除

Spark学习笔记(二):RDD编程基础

 

感谢和推荐林子雨老师的课程: 厦门大学林子雨老师spark编程基础

猜你喜欢