您的位置:首页 > 其它

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

2018-01-26 15:51 176 查看
                                                      RDD介绍和创建RDD是Spark的核心:分布式元素集合。(弹性分布式数据集)
Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分成多个子分区,这些分区运行在集群中的不同节点之上。用户可以有两种方法创建Rdd:读取一个外部数据集或在驱动器程序中分发驱动器程序中的对象集合。lines = sc.textFile("README.md") #创建字符串的RDDRDD的操作有两种,分别是转化操作和行动操作:(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上,否则驱动程序内存会崩溃
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spark RDD