葵花宝典--sparkRDD

一、RDD概述

RDD是弹性分布式数据集,是spark中数据的抽象。在代码中是一个抽象类,他代表一个抽象类不可变、可分区、元素可并行计算的集合。

  • 弹性:存储(内存和磁盘相互切换)、容错(数据丢失可自动恢复)、计算(计算出错重试)、分片(可根据需求重新分片)
  • 分布式:数据存储在hdfs上
  • 数据集:RDD只保存计算逻辑,不保存数据
  • 数据抽象:RDD是一个抽象类,需要具体实现
  • 不可变:RDD封装了计算逻辑,是不可变的,想要改变只能生成新的RDD,在新的RDD封装计算逻辑
  • 可分区、并行计算

RDD特性

  • 一组分区:getPartitions(对数据进行分区)
  • 一个分区函数:compute(封装了分区内数据的计算逻辑)
  • RDD之间的依赖:getDependencies(每个RDD之间的转换关系。也称为血缘)
  • 一个分区:partitioner(RDD中的分片函数,控制分区的数据流向)
  • 一个列表:存储每个partition的优先位置,移动数据不如移动计算,除非资源不足

RDD创建:

  • 集合创建:val rdd: RDD[Int] = sc.parallelize(Array(1, 2, 3, 4, 5, 6, 7, 8));val rdd1: RDD[Int] = sc.makeRDD(Array(1, 2, 3, 4, 5, 6, 7, 8))
  • 外部存储创建:val lineWordRdd: RDD[String] = sc.textFile("hdfs://hadoop102:9000/input")
  • 其他RDD创建:RDD之间的转换,生成新的RDD

分区规则:

1)、默认分区规则

①、从集合创建:按照机器的核数进行分区,核数和分区数相同

      case LOCAL_N_REGEX(threads) =>
        def localCpuCount: Int = Runtime.getRuntime.availableProcessors()
        val threadCount = if (threads == "*") localCpuCount else threads.toInt

②、从外部存储创建:默认分区数和2取最小值

def defaultMinPartitions: Int = math.min(defaultParallelism, 2)

2)、指定分区规则

①、从集合创建:按照指定发分区数进行分区,按照平均分配原则

    //length:数组长度   numSlices:分区数
    def positions(length: Long, numSlices: Int): Iterator[(Int, Int)] = {
      (0 until numSlices).iterator.map { i =>
        val start = ((i * length) / numSlices).toInt
        val end = (((i + 1) * length) / numSlices).toInt
        (start, end)
      }
    }

②、从外部存储创建:指定为最小分区数,实际分区数按照切片数确定

        private static final double SPLIT_SLOP = 1.1;   // 10% slop
        ArrayList<FileSplit> splits = new ArrayList<FileSplit>(numSplits);
                
        long bytesRemaining = length;
          while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) {
            String[] splitHosts = getSplitHosts(blkLocations,
                length-bytesRemaining, splitSize, clusterMap);
            splits.add(makeSplit(path, length-bytesRemaining, splitSize,
                splitHosts));
            bytesRemaining -= splitSize;
          }

          if (bytesRemaining != 0) {
            String[] splitHosts = getSplitHosts(blkLocations, length
                - bytesRemaining, bytesRemaining, clusterMap);
            splits.add(makeSplit(path, length - bytesRemaining, bytesRemaining,
                splitHosts));
          }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
葵花-8卫星数据处理是指对葵花-8卫星所收集到的数据进行处理和分析的过程。葵花-8卫星是中国自主研制的一颗气象卫星,具有高空间、时间分辨率和全天候观测能力,可连续监测大气、云、气象辐射、地表温度等气象要素。 葵花-8卫星数据处理c 是指通过计算机处理葵花-8卫星获取到的数据。这种数据处理涉及到多个步骤,包括数据预处理、数据校正、数据解析、数据融合和数据分析等。 首先,对葵花-8卫星获取到的原始数据进行预处理。这一步主要是对数据进行去噪、去毛刺等处理,以保证数据的质量和准确性。 接下来,对数据进行校正。葵花-8卫星数据校正主要包括大气校正和地表校正。大气校正通过模型计算和校正算法将大气效应从观测数据中去除,地表校正则是对地表观测数据进行反演和修正,以得到真实的地表特征。 然后,进行数据解析。数据解析是将原始数据转化为可读、可理解的形式,一般会生成图片、图像和地图等。这一步也包括数据的格式转换和数据的可视化处理。 数据融合是将不同类型或者不同时间段的数据整合在一起,以得到更全面、更准确的信息。葵花-8卫星数据融合常用的方法包括像元融合、特征融合等。 最后,进行数据分析。数据分析主要是对处理后的数据进行统计、模型分析和预测。这一步可以揭示和研究数据背后的规律和规律,为气象学、地质学、生态学等领域的研究提供数据支撑。 总之,葵花-8卫星数据处理c 是一项非常重要的工作,它有助于更好地理解和利用葵花-8卫星获取到的气象数据,提供科学的决策依据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值