RDD(Resilient Distributed Dataset) 弹性分布式数据集
不可变的分布式对象集合,每个RDD被分为多个分区,分区运行在集群中的不同节点上。
1.创建方法:
1)读取外部数据集
2)驱动器程序里分发驱动器程序中的对象集合(list/set)
调用示例:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
val sc = new SparkContext(conf)
读取外部数据集
lines = sc.textFile("filename")
对集合进行并行化(parallelize)
lines = sc.parallelize(List(1,2,3,4,5))
2.操作类型
1)转化操作(transformation)
由一个RDD生成一个新的RDD
2)行动操作(action)
对RDD计算一个结果,将结果返回到驱动器程序中。
基本RDD
1.针对各个元素的转化操作
map():接收一个函数,将函数用于RDD的每个元素,返回新的RDD以及对应元素的值
filter():接收一个函数,将RDD中满足该函数的元素放入新的RDD中
val input = sc.parallelize(List(1,2,3,4))
val result = input.map(x=>x*x)
println(result.collect().mkString(","))
常用转化操作:
map():函数构成新的RDD
flatMap():函数用于新的RDD,通常用来切分单词
filter():反馈一个通过传给filter()的函数元素组成的rdd ex: rdd.filter(x=>x!=1)
distinct():去重
sample(withReplacement,fraction,[seed]):对rdd采样
union():生成 一个包含两个rdd中所有元素的rdd,
intersection():求两个rdd共同的元素的rdd
subtract():移除一个rdd中的内容
cartesian():与另一个rdd的笛卡尔积
常用行动操作:
reduce():接受一个函数作为参数,比如累加,方便计算元素总和,元素个数etc
fold():接受一个函数,加上一个初始值作为每个分区第一次调用时的结果
collect():返回rdd中所有元素
count():返回元素个数
countByValue():各元素在rdd中出现的次数
take(num):返num个元素
top(m):返回前m个元素
takeOrdered(num)(ordering):rdd中按提供的顺序返回最前面num个元素
takeSample(withReplacement,num,[seed]).reduct(func):从rdd中任意返回一些元素
aggregate(zeroValue)(seqOp,combOp):类似reduct(),通常返回不同类型的函数
foreach(func):对rdd中每个元素使用给定的函数
持久化存储:
偌rdd.persist() unpersist()
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY