RDD:弹性分布式数据集,简单来说就是元素的分布式集合,在Spark中,所有的工作都被表达为创建新的RDD,对已存在的RDD做变换,或者对RDD调用行动来计算得到一个结果
变换:指对RDD进行一次操作,生成另外一个RDD的过程
行动:指对RDD进行一次操作,返回一个计算结果的过程
二、变换算子针对一个包含{1, 2, 3, 3}的RDD进行基本的变换
创建该RDD:
val rdd = sc.parallelize(Array(1, 2, 3, 3))
替换采样:抽取一次之后放回数据,非替换采样:抽取一次之后不放回,后续不会再抽出该条数据
针对包含{1, 2, 3} 和 {3, 4, 5} 的两个RDD 进行变换
创建以上两个RDD:
val rdd = sc.parallelize(Array(1, 2, 3))val other = sc.parallelize(Array(3, 4, 5))
对包含{1, 2, 3, 3}的RDD执行动作 函数名 目的 示例 结果 collect()返回RDD中的所有元素rdd.collect(){1, 2, 3, 3}count()返回RDD当中的元素个数rdd.count()4countByValue()返回RDD中每个元素出现的次数rdd.countByValue(){(1, 1), (2, 1), (3, 2)}take(num)返回RDD中num个元素rdd.take(2){1, 2}top(num)返回RDD当中前num个元素rdd.top(2){3, 3}takeSample(withReplacement, num, [seed])随机返回RDD中的num个元素rdd.takeSample(false, 1)Nondeterministicreduce(func)并行合并RDD中的元素rdd.reduce((x, y) => x + y)9fold(zeroValue)(func)提供一个初始值,并根据函数合并RDD当中的元素(首先合并每个分区内的元素,然后合并分区间的元素)rdd.fold(3)((x, y) => x + y)8分区值为36, 1个分区值为15aggregate(zeroValue)(seqOp, combOp)提供一个初始值,和两个函数,第一个函数用于分区内元素合并,第二个函数用于分区间元素合并rdd.aggregate((0, 0))((x, y) => (x._1 + y, x._2 + 1), (x, y) => (x._1 + y._1, x._2 + y._2))(9, 4)foreach(func)对RDD中的每个元素应用函数funcrdd.foreach(func)Nothing