Spark之RDD编程

Posted xiao02fang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark之RDD编程相关的知识,希望对你有一定的参考价值。

  Spark对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset),简称RDD。RDD其实就是分布式的元素集合。在Spark中,对数据的所有操作不外乎创建RDD、转化已有RDD以及调用RDD操作进行求值。而在这背后,Spark会自动将RDD中的数据分发到集群中,并行化执行。

一、创建RDD

将程序中已有的集合传给SparkContext的parallelize()方法:

1、python中parallelize()方法:

lines = sc.parallelize(["pandas","i like pandas"]) 

2、Scala中的parallelize()方法:

val lines = sc.parallelize(List("pandas","i like pandas")) 

更常用的方式是从外部存储中读取数据来创建RDD:

1、Python中的textFile()方法

lines = sc.textFile("/path/to/readme.md")

2、Scala中的textFile()方法

val lines = sc.textFile("/path/to/readme.md")

二、基本RDD

(一)针对各个元素的转化操作

对一个数据为{1,2,3,3}的RDD进行基本的RDD转化操作

map()

  将函数应用在RDD中的每个元素,将返回值构成新的RDD,例:rdd.map(x =>x+1) ,结果:{2,3,4,4}

flatmap()

  将函数应用于RDD中的每个元素,将返回的迭代器的所有内容构成新的RDD,通常用来切分单词。例:rdd.flatMap(x=>x.to(3)),结果:{1,2,3,2,3,3,3}

filter()

  返回一个由通过传给filter()的函数的元素组成的RDD。例:rdd.filter(x=>x!=1),结果{2,3,3}

distinct()

  去重。例:rdd.distinct(),结果:{1,2,3}

sample(withReplacement,fraction,[seed])

  对RDD采样,以及是否替换。例:rdd.sample(false,0.5),结果:非确定的。

对数据分别为{1,2,3}和{3,4,5}的RDD进行针对两个RDD的转化操作

union()

  生成一个包含两个RDD中所有元素的RDD。例:rdd.union(other),结果:{1,2,3,3,4,5}

intersection()

  交集,求两个RDD共同的元素的RDD。例:rdd.intersection(other),结果:{3}

subtract()

  差集,移除一个RDD中的内容。例:rdd.subtract(other),结果:{1,2}

cartesian()

  与另一个RDD的笛卡尔积。例:rdd.cartesian(other),结果:{(1,3),(1,4),(1,5)……(3,5)}

(二)针对各个元素的行动操作

对一个数据为{1,2,3,3}的RDD进行基本的RDD行动操作

collect()

  返回RDD中的所有元素。例:rdd.collect(),结果:{1,2,3,3}

count()

  RDD中的元素个数。例:rdd.count(),结果:4

countByValue()

  各元素在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}

takeOrdered(num)(ordering)

  从RDD中按照提供的顺序返回最前面的num个元素。例:rdd.takeOrdered(2)(myOrdering),结果:{3,3}

takeSample(withReplacement,num,[seed])

  从RDD中返回任意一些元素。例:rdd.takeSample(false,1),结果:非确定的

reduce(func)

  并行整合RDD中所有数据。例:rdd.reduce((x,y)=>x+y),结果:9

fold(zero)(func)

  和reduce()一样,但是需要提供初始值。例:rdd.fold(0)((x,y)=>x+y),结果:9

aggregate(zeroValue)(seqOp,combOp)

  和reduce()相似,但是通常返回不同类型的函数。例: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中的每个元素使用给定的函数。例:rdd.foreach(func),结果:无

技术图片

 

以上是关于Spark之RDD编程的主要内容,如果未能解决你的问题,请参考以下文章

spark core之RDD编程

大数据技术之_19_Spark学习_02_Spark Core 应用解析+ RDD 概念 + RDD 编程 + 键值对 RDD + 数据读取与保存主要方式 + RDD 编程进阶 + Spark Cor

Spark快速入门之RDD编程模型

11.spark sql之RDD转换DataSet

Spark编程实战-词频统计

Spark编程实战-词频统计