spark RDD

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的转换。
  3. A list of dependencies on other RDDs
    RDD会记录它的依赖 ,依赖还具体分为宽依赖和窄依赖,但并不是所有的RDD都有依赖。为了容错(重算,cache,checkpoint),也就是说在内存中的RDD操作时出错或丢失会进行重算。
  4. Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
    可选项,如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区,例如这里自定义的Partitioner是基于key进行分区,那则会将不同RDD里面的相同key的数据放到同一个partition里面
  5. Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
    可选项,最优的位置去计算,也就是数据的本地性。(移动计算而不是移动数据)

RDD创建

宏观上看,每个Spark应用程序都由一个驱动程序组成,该驱动程序运行用户的main方法,并在集群上执行各种并行操作。Spark提供的主要抽象是一个弹性分布式数据集(RDD),它是跨集群节点划分的元素集合,可以并行操作。rdd是通过从Hadoop文件系统(或任何其他Hadoop支持的文件系统)中的一个文件或驱动程序中现有的Scala集合开始创建的,并对其进行转换。用户还可能要求Spark在内存中持久化一个RDD,以便在多个并行操作中有效地重用它。并且,rdd可以自动从节点故障中恢复。

  1. 从驱动程序中现有的Scala集合开始创建

    def createFromMemory() = {
         
        val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD1")
        val sc = new SparkContext(sparkConf)
    
        val data = Array(1, 2, 3, 4, 5)
        //val distData = sc.parallelize(data)
    
        // 底层调用parallelize
        val distData = sc.makeRDD(data)
        distData.collect().foreach(println)
    
        sc.stop()
    }
    
  2. 通过从Hadoop文件系统(或任何其他Hadoop支持的文件系统)中的一个文件创建

    def createFromFile() = {
         
        val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD2")
        val sc = new SparkContext(sparkConf)
    
        // path路径默认以当前环境的根路径(SparkLearning)为基准
        val rddFile = sc.textFile("datas")
    
        // wholeTextFiles 返回元组 含文件位置信息,整个文件的内容
        val rddWholeFile = sc.wholeTextFiles("datas")
        rddFile.collect
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值