spark官方文档中的快速入门指南:http://spark.apache.org/docs/latest/quick-start.html
本书的github仓库:https://github.com/databricks/learning-spark
__________________________________________
RDD基础
- spark核心概念、核心抽象
- 弹性分布式数据集Resilient Distributed Database
- 分布式的元素集合
spark中,所有操作不外乎创建RDD、转化已有RDD以及调用RDD操作进行求值。
每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。
RDD可以包含python、Java、Scala中的任意类型的对象,甚至可以包含用户自定义的对象。
RDD支持两种类型的操作:转换操作(transformation)和行动操作(action)。区别在于spark计算RDD的方式不同。spark会惰性计算RDD,只有第一次在一个行动操作中用到时,才会真正计算。
如果想在多个行动操作中重用同一个RDD,可以使用RDD.persist()让spark把这个RDD缓存下来,这样第一次对持久化的RDD计算后,spark会把RDD的内容保存在内存中(以分区方式存储到集群中的各机器上),在之后的行动操作中就可以重用这些数据。在任何时候都能进行重算是把RDD描述为“弹性”的原因。
每个spark程序或shell会话的工作方式:
- 从外部数据创建出输入RDD
- 使用诸如filter()这样的转换操作对RDD进行转化,以定义新的RDD
- 告诉spark对需要被重用的中间结果RDD执行persist()操作
- 使用行动操作(例如first()/count())来触发一次并行计算,spark会对计算进行优化后再执行
--------------------------------------------------------
创建RDD
- 读取外部数据
- 在驱动器程序中对一个集合进行并行化(需要把整个数据集放在一台机器的内存中)
----------------------------------------------------------
RDD操作
- 转化操作(transformation)
- 行动操作(action)
转化操作返回的是新的RDD,行动操作返回的是其他的数据类型。
行动操作需要生成实际的输出,会把最终求得的结果返回到驱动器程序,或者写入外部存储系统中,会强制执行那些求值必须使用到的RDD的转化操作。