Spark RDD API全集

RDD是啥

Resilient Distributed Dataset (RDD),弹性分布式数据集,是对不可修改,分区的数据集合的抽象。

RDD is characterized by five main properties:

  • A list of partitions
  • A function for computing each split
  • A list of dependencies on other RDDs
  • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
  • Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

org.spark.rdd.RDD类方法

RDD是一个抽象类,定义如下

 
 
 
  1. abstract class RDD[T] extends Serializable with Logging

RDD类的public方法大约有80多个(包括不同参数重载的),均在下面列出。

值得注意的是,RDD类中并没有定义xxxByKey形式的方法,这类方法其实是在PairRDDFunctions中定义的,通过隐式转换,键值对形式的RDD(即RDD[(K, V))可以调用PairRDDFunctions中定义的方法。

键值转换操作

 
 
 
  1. filter(f: (T) Boolean): RDD[T]
  2. 过滤数据,仅留下使得f返回true的元素。
  3. map[U](f: (T) U)(implicit arg0: ClassTag[U]): RDD[U]
  4. 将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
  5. 输入分区与输出分区一对一,即:有多少个输入分区,就有多少个输出分区。
  6. flatMap[U](f: (T) TraversableOnce[U])(implicit arg0: ClassTag[U]): RDD[U]
  7. 第一步和map一样,最后将所有的输出分区合并成一个。
  8. 使用flatMap时候需要注意:
  9. flatMap会将字符串看成是一个字符数组。
  10. mapPartitions[U](f: (Iterator[T]) Iterator[U], preservesPartitioning: Boolean = false)(implicit arg0: ClassTag[U]): RDD[U]
  11. 该函数和map函数类似,只不过映射函数的参数由RDD中的每一个元素变成了RDD中每一个分区的迭代器。如果在映射的过程中需要频繁创建额外的对象,使用mapPartitions要比map高效的过。
  12. 比如,将RDD中的所有数据通过JDBC连接写入数据库,如果使用map函数,可能要为每一个元素都创建一个connection,这样开销很大,如果使用mapPartitions,那么只需要针对每一个分区建立一个connection
  13. 参数preservesPartitioning表示是否保留父RDDpartitioner分区信息。
  14. mapPartitionsWithIndex[U](f: (Int, Iterator[T]) => Iterator[U], preservesPartitioning: Boolean = false)(implicit arg0: ClassTag[U]): RDD[U]
  15. 函数作用同mapPartitions,不过提供了两个参数,第一个参数为分区的索引。
  16. keyBy[K](f: (T) K): RDD[(K, T)]
  17. 通过f函数为每个元素生成一个KEY
  18. sortBy[K](f: (T) K, ascending: Boolean = true, numPartitions: Int = this.partitions.length)(implicit ord: Ordering[K], ctag: ClassTag[K]): RDD[T]
  19. 通过给定的函数对元素排序
  20. zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]
  21. 与另一个RDD组合成(k,v)对。
  22. zipPartitions[B, V](rdd2: RDD[B], preservesPartitioning: Boolean)(f: (Iterator[T], Iterator[B]) Iterator[V])(implicit arg0: ClassTag[B], arg1: ClassTag[V]): RDD[V]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值