欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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编程基础

相关标签: Spark