Spark系列之弹性数据集-RDD

  RDD不仅是分布式的数据集合,更是Spark的核心。

  RDD会跟踪应用每个块的所有转换(日志),也就是说,当RDD的某个分区数据丢失时会根据日志进行重新计算。  

  RDD是无Schema的数据结构。

1、RDD的生成

  RDD的生成有三种方式,   

    1) .parallelize() 集合生成

    2)外部文件或系统

    3)通过其他RDD生成

  外部文件或系统生成RDD通常可以是NTFS、FAT本地文件系统,或HDFS、S3、Cassandra这类的分布式文件系统。

  可以支持多种数据格式,文本、parquet、JSON、Hive表以及使用JDBC驱动程序可读取的关系数据库中的数据。

2、转换-Transformation

  转换是对数据集进行逻辑的处理,并未涉及数据的归并或分散。

  官网参考:http://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-operations

  map,该方法应用在每个RDD元素上,大多数情况是对每一行的转换。

  filter,对RDD中的元素进行过滤,筛选符合条件的元素。

  flatMap,应用在每个RDD上,每行看做一个列表。

  distinct,返回列表中不同的值。

  sample,返回数据集的随机样本。第一个参数指定采样是否应该替换,第二个参数定义返回数据的分数,第三个参数是伪随机数产生器的种子。

  leftOuterJoin,和sql中的left join同理。

  repaatition,对数据集进行重新分区,改变数据集分区的数量。会重组数据,对性能产生重大影响。

3、操作-Action

  官网参考:http://spark.apache.org/docs/latest/rdd-programming-guide.html#actions

  take,返回数据的多少行,优于count方法,take仅返回单个分区的数据。

  collect,将所有RDD的元素返回给驱动程序。

  reduce,减少RDD中的元素。rdd.map(lambda row:row[1]).reduce(lambda x,y: x+y)

  count,统计RDD中元素的数量

  saveAsTextFile,保存RDD为文本,每一个分区一个文件。

  foreach,对每个RDD元素使用相同的函数。

4、宽窄依赖

  窄依赖是指父RDD的每个分区只被子RDD的一个分区使用,宽依赖是父RDD的每个分区可能被多个子RDD分区所使用的。

  

   宽依赖会触发shuffle过程。

猜你喜欢

转载自www.cnblogs.com/wind-man/p/13394272.html