2. Spark RDD定义与特性

Spark RDD定义与特性

RDD

RDD(弹性分布式数据集):代表一个不可变的,可并行操作的分区元素集合

内部表现上,RDD具有5个特性:

​ a. A list of partitions(分区列表);
​ b. A function for computing each split(每个切分的计算函数);
​ c. A list of dependencies on other RDDs(依赖其他RDD的列表);
​ d. Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned);
​ (可选择的,针对键值对的RDD数据集具有Partitioner(分区器),例如,K-V RDD默认为hash分区)
​ e. Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
​ (可选择的,计算每个切分的首选位置列表(例如,HDFS文件的块位置))。

构建RDD的三种方式:
a. textFile():从HDFS、本地文件系统(在所有节点上可用)或任何支持hadoop的文件系统URI节点读取文本文件,并将其作为字符串的RDD返回。
b. parallelize():将一个本地Scala集合来形成一个RDD。
c. makeRDD():将一个本地Scala集合来形成一个RDD。
RDD的分区列表partitions
  1. local[*] (local模式下) : defaultParallelism默认并行度为*
 sc.parallelize() --> 默认RDD的分区数为*个;如果指定分区个数,则RDD分区为指定值;
 sc.textFile()    --> 默认计算方式: def defaultMinPartitions: Int = math.min(defaultParallelism, 2)
  1. standalone模式 : defaultParallelism默认并行度为总核数
 sc.parallelize() --> 如果总核数>2,RDD分区数为核数,反之为2;
 sc.textFile()    --> 默认计算方式: def defaultMinPartitions: Int = math.min(defaultParallelism, 2)
  1. on yarn模式 : defaultParallelism默认并行度为总核数
 sc.parallelize() --> 如果总核数>2,RDD分区数为核数,反之为2;
 sc.textFile()    --> 默认计算方式: def defaultMinPartitions: Int = 	math.min(defaultParallelism, 2)
     非默认情况:计算方式为
     long goalSize = totalSize / (numSplits == 0 ? 1 : numSplits);
     Math.max(minSize, Math.min(goalSize, blockSize));   
     RDD的分区实质为Hadoop的InputSplit(旧版本计算方式)
RDD依赖关系

可通过toDebugString函数获取当前RDD的依赖关系图

 rdd1.toDebugString
 (12) hdfs://192.148.51.41:9000/hello1 MapPartitionsRDD[1] at textFile at RDDdemo.scala:8 []
   |   hdfs://192.148.51.41:9000/hello1 HadoopRDD[0] at textFile at RDDdemo.scala:8 []
RDD首选位置

说明:只有类似HadoopRDD的数据集才有首选位置,首选位置描述当前RDD的每个分区所在的集群节点名称

查看首选位置的语法:

scala>val rdd = sc.textFile("/hello1",3)

scala> rdd.dependencies
res11: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.OneToOneDependency@66e22c32)

scala> rdd.dependencies(0)
res12: org.apache.spark.Dependency[_] = org.apache.spark.OneToOneDependency@66e22c32

scala> rdd.dependencies(0).rdd
res13: org.apache.spark.rdd.RDD[_] = /hello1 HadoopRDD[17] at textFile at <console>:24

scala>rdd.dependencies(0).rdd.preferredLocations(rdd.partitions(0))
res15: Seq[String] = ArraySeq(master, slave02)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值