码迷,mamicode.com
首页 > 其他好文 > 详细

Spark之RDD编程

时间:2020-05-30 22:18:13      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:on()   inter   ted   context   span   不同   lin   park   top   

  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编程

标签:on()   inter   ted   context   span   不同   lin   park   top   

原文地址:https://www.cnblogs.com/xiao02fang/p/12994922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!