【大数据学习】之 Spark-RDD初认识

一、RDD

       spark未来的编程方向是DataSet或DataFrame,但是RDD是Spark 的基石、底层,所以必须要掌握

先看看github上的介绍:

https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala

或者我们可以从IDEA上的源码去了解,点击搜索图标,搜“RDD”

 

A Resilient Distributed Dataset (RDD)  --弹性的分布式的数据集

   弹性          分布式         数据集

 

 

二、RDD的五大特性,官网上没有的,只有去源码上去找,源码可以上IDEA下载

* Internally, each 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)

 

对于关键类的关键方法一定要去看对应的注释。比如DataFrame,RDD,DataSet有时官网不一定齐全,一定要去源码上看。

 

RDD的五大特性?(参考我们的一个同学)

1)A list of partitions

RDD是一个由多个partition(某个节点里的某一片连续的数据)组成的的list;将数据加载为RDD时,一般会遵循数据的本地性(一般一个hdfs里的block会加载为一个partition)。

2)A function for computing each split

RDD的每个partition上面都会有function,也就是函数应用,其作用是实现RDD之间partition的转换。另外补充一点,在spark里面,partition就是等于task,有几个partition就有几个task。

3)A list of dependencies on other RDDs

RDD会记录它的依赖 ,为了容错(重算,cache,checkpoint),也就是说在内存中的RDD操作时出错或丢失会进行重算。

RDDA =map=>RDDB==>RDDC

4)Optionally,a Partitioner for Key-value RDDs

  可选项,如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区,例如这里自定义的Partitioner是基于key进行分区,那则会将不同RDD里面的相同key的数据放到同一个partition里面

5)Optionally, a list of preferred locations to compute each split on

最优的位置去计算,也就是数据的本地性。

 

RDD的五大特性介绍完了,现在来看看RDD类

abstract class RDD[T: ClassTag](
   
@transient private var _sc: SparkContext,
   
@transient private var deps: Seq[Dependency[_]]
  )
extends Serializable with Logging

抽象类(abstract)RDD,要用子类来实现

按照正常的写法应该是with Werializable with Logging,但是在Scala里面,第一个可以用继承extends,后面的用with。。。

 

三、RDD里面有5个很重要的方法,对应RDD的5大特性

1、protected def getPartitions: Array[Partition]

对应于五大特性里面的第一个

2、def compute(split: Partition, context: TaskContext): Iterator[T]

partition就是等于task,有几个partition就有几个task。对应于五大特性里面的第二个

3、protected def getDependencies: Seq[Dependency[_]] = deps

4、val partitioner: Option[Partitioner] = None

5、protected def getPreferredLocations(split: Partition): Seq[String] = Nil

   那个Nil就是指空的List。

 

四、SparkContext

指Spark上下文,什么是上下文,就是什么东西都往里面装。

* Configuration for a Spark application. Used to set various Spark parameters as key-value pairs.
*
* Most of the time, you would create a SparkConf object with
`new SparkConf()`, which will load
* values from any
`spark.*` Java system properties set in your application as well. In this case,
* parameters you set directly on the
`SparkConf` object take priority over system properties.

 

要创建SparkContext,必须要先创建SparkConf,SparkConf底层的数据结构其实是map。

创建SparkConf就用new SparkConf()就可以创建了,而且是以spark.*开头的,

spark.* <= SparkConf ,自定义参数必须是以spark开头的,spark是不认的。

 

object SparkContextApp {
 
//RDD编程的模型:第一步是创建sparkConf,第二步创建sparkContext,然后吧sparkConf传到sparkContext,第三业务代码,第四是关闭
 
def main(args: Array[String]): Unit = {
   
//最好就是在SparkContext创建之前,就创建sparkConf,跟着把sparkConf传到SparkContext

    //step 1
   
val sparkConf=new SparkConf().setMaster("local[2]").setAppName("SparkContextApp") //必须要设置URL和名字

    //step 2
   
val sc=new SparkContext(sparkConf)

   
//TODO....step 3

    
//step 4
   
sc.stop()
  }

}

这个错可以忽略掉。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值