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
|