Spark学习笔记(一)--RDD编程

RDD编程

弹性式分布数据集(ResilientDistributed Dataset,简称RDD)。RDD其实就是分布式元素集合。在Spark中对数据的所有操作不外乎创建RDD,转化已有的RDD以及调用RDD操作经行求值。

RDD就是一个不可变的分布式对象集合。每个RDD都会被分为多个分区,这些分区运行在集群中的不同节点上。

 

RDD支持两种类型的操作:转化操作和行动操作。

转化操作:由一个RDD生成一个新的RDD

行动操作:对RDD计算一个结果,并把结果返回到驱动器程序中,或者把结果存储到外部存储系统(如,HDFS)中。

 

惰性:RDD只有第一次在一个行动操作中用到时,才会真正计算。

Spark了解了完整的转化操作链时,它就可以只计算求结果时真正需要的数据。例如,在行动操作first()中,Spark只需要扫描文件直到找到第一个匹配的行为止,而不需要读取整个文件。

在任何时候我们都可以对RDD经行重算是我们把RDD描述为“弹性”的原因。

当对数据反复操作时,可以用RDD.persist()让Spark把这个RDD缓存下来。

如果不会重用该RDD,我们就没必要浪费存储空间,可以遍历一遍数据计算结果即可。

总结

从外部数据创建出输入RDD。

使用诸如first()河阳的转化操作对RDD经行转化,以定义新的RDD。

告诉Spark对需要被冲用的中间结果RDD执行persist()操作。

使用行动操作(例如count()和first()等)来触发一次并计算,Spark会对计算经行优化后再执行。

创建RDD

创建RDD最简单的方式就是把程序中一个已有的集合传给SparkContext的parallelize()。

val lines =sc.parallelize(List(“pandas”,”I like pandas”))

外部数据集的读取

val lines = sc.textFile(“README.md”)

RDD操作

转化操作

RDD的转化操作是返回新的RDD的操作。转化出来的RDD是惰性求值的,只有在行动操作中用到这些RDD时才会被计算。

行动操作

行动操作会把最终结果返回到驱动程序中。

val text =sc.textFile(“README.md”)
text.take(10).foreach(println)

RDD中还有一个collect()函数,可以用来获取整个RDD中的数据。如果你的程序把RDD筛选到一个很小的规模,并且你想在本地出来这些数据时。但是,只有当你的整个数据集能在单台机器的内存中放得下时,才能使用collect(),因此,collect()不能用在大规模数据集上。

Tips:
在大多数情况下,RDD不能通过collect()收集到驱动进程中,因为它们一般都很大。因此,我们通常把这些数据写到诸如HDFS这样的分布式的存储系统中。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值