一起学Spark(3) -- RDD介绍和创建

                                                      RDD介绍和创建

RDD是Spark的核心:分布式元素集合。(弹性分布式数据集)

Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分成多个子分区,这些分区运行在集群中的不同节点之上。用户可以有两种方法创建Rdd:读取一个外部数据集或在驱动器程序中分发驱动器程序中的对象集合。

lines = sc.textFile("README.md") #创建字符串的RDD

RDD的操作有两种,分别是转化操作和行动操作:

(1)转化操作,就是由一个RDD转化成另一个RDD,如

pythonLines = lines.filter(lambda x :"Python" in x)

 过滤lines中的元素,包含“Python”的组成新的RDD pyrhonLines。

 

 转化操作和行动操作的区别在于Spark计算RDD的区别不同,虽然转化操作可以在任何时候定义,但Spark只有惰性计算这些Rdd,它们只有第一次在一个行动操作中用到时,才会真正计算。

(2)行动操作,计算出具体结果的操作,如

first_data = pythonLines.first() #获取RDD的第一个元素

默认情况下,Spark的RDD会在每次对它进行行动操作时重新计算。如果想在多个行动操作中重用同一个RDD,可以用RDD.persist()进行持久化处理。保持到前面说过的JVM内存或者硬盘上,跟存储等级有关,以后介绍。默认是内存。这样在以后的行动操作中,就可以重用这些数据了。(耗费内存或硬盘)

建RDD可以直接从内存对象获取,但通常工作中不会用到这种形式,可以用来自己创建小规模RDD练习。如下:

lines = sc.parallelize(["pandas","i like pandas"]) #直接构建


总结:RDD 操作有转化操作和行动操作两类

 

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

RDD1 = RDD2.filter(lambda x:"xxx" in x) #过滤
RDD3 = RDD1.union(RDD2) #RDD3是RDD1和RDD2的并集,含有两者的全部元素

行动操作:生成实际的结果和输出,会强制执行那些求值必须用到的RDD转化操作(根据谱系图),比如

rdd.count() #统计个数
rdd.first() #第一个元素
rdd.take(n) #前n个元素
rdd.collect() #获取RDD全部元素,不能用在大规模的RDD上,否则驱动程序内存会崩溃

 

 

 

 

 

 

 


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值