黑马程序员技术交流社区

标题: 【上海校区】spark 基础(一)RDD [打印本页]

作者: 不二晨    时间: 2018-8-28 09:33
标题: 【上海校区】spark 基础(一)RDD

RDD resilient distributed dataset  弹性分布式数据集

在spark 中对数据的所有操作均可归类为:创建RDD,转化已有RDD,调用RDD操作求值。

每个RDD可以被分为多个分区,这些分区运行在集群的不同节点上,RDD可以包含python,scala,java等任意类型的对象。

创建RDD方法;

1 读取外部数据集 SparkContext.textFile

2 在驱动程序中分发驱动程序中的对象集合

RDD支持两种操作:

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

2行动操作action  对RDD计算出一个结果,并将结果返回到驱动器程序中,或存放到外部存储系统(HDFS)

只在首次调用一个行动操作时才会真正计算;

每次进行行动操作时RDD会重新计算,如果想要重复使用一个RDD,则需要用RDD.persist()缓存到内存或者磁盘上,实际操作中经常会将数据的一部分读取到内存中,反复查询。

二 创建RDD

程序中已有的集合传给sparkcontext  sc.parralelize()

读取外部数据 sc.textFile()

三 RDD操作

转化操作 从一个RDD生成另一个RDD

spark会使用谱系图记录RDD间的依赖关系

行动操作 对RDD 操作得出结果反馈给驱动程序或者输出 collect 会把RDD的数据存放在本地内存中,写到HDFS或S3 saveAsTextFile() saveAsSequenceFile()

四 向Spark传递函数

转化操作和行动操作依赖于用户传递的函数计算 python  scala 和Java均可实现,前两者支持匿名函数

Function<T,R>  实现方法 R call (T)

Function2<T1,T2,R>  实现方法 R call (T1,T2)

FlatMapFunction<T,R> 实现方法 Iterable<R> call (T)

五 常见的转化操作和行动操作

针对各个元素的转化操作 map(),filter()

对每个元素生成多个输出元素 flatmap()返回值序列的迭代器

伪集合操作 将RDD看做时元素的集合

distinct(),union(),intersection(),subtract(),笛卡尔积 catesian()

行动操作 reduce() 返回类型与RDD元素类型一样 aggregate()可以不一致。collect() 返回驱动器数据


不同RDD类型间进行转换,在Java中有专门的类,要构建特殊类型的RDD 比如JavaDoubleRDD,JavaPairRDD,需要特殊的function类

在python中所有函数都实现在基本的RDD类中

【转】https://blog.csdn.net/weixin_40988315/article/details/82114134



作者: 梦缠绕的时候    时间: 2018-8-30 11:36

作者: 不二晨    时间: 2018-8-30 17:14
奈斯,加油加油




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2