RDD_数据源与数据位置

RDD(弹性分布式数据集)是Spark的核心抽象。它是一组元素,在集群的节点之间进行分区,以便我们可以对其执行各种并行操作。

1.parallelize

2/makeRDD

3.textFile

4.saveAsTextFile

makeRDD底层使用的就是parallelize,从内存中生成数据

  def makeRDD[T: ClassTag](
      seq: Seq[T],
      numSlices: Int = defaultParallelism): RDD[T] = withScope {
    parallelize(seq, numSlices)
  }
object Spark_RDD01 {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local").setAppName("RDD")
    val sc = new SparkContext(sparkConf)
    val rdd1 = sc.parallelize(Seq(1, 2, 3, 4))
    // makeRDD 底层用的是parallelize()
    val rdd = sc.makeRDD(List(1, 2, 3, 4))
    rdd.collect().foreach(println)
    sc.stop()
  }

}

textFile是从文件中读取数据

object Spark_RDD02 {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local").setAppName("RDD")
    val sc = new SparkContext(sparkConf)
    val rdd = sc.textFile("E:\\atguiguDemo03\\leet-code\\spark01\\src\\main\\resources\\1.txt")
    rdd.collect().foreach(println)
    sc.stop()
  }

}

这里用的是绝对路径,如果是相对路径的话是针对当前项目的

saveAsTextFile为保持为目录,按照分区的规程保存

saveAsTextFile和makeRDD

如果是内存数据保存的话,则如果有分区的参数则按照分区的参数分区,如果没有的话按照setMaster和2的最小值当作分区的数量。

object Spark_RDD03 {
  def main(args: Array[String]): Unit = {
    // 并行度 分区
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)
    val rdd = sc.makeRDD(List(1, 2, 3, 4))
    // 分区保存,默认为local[*]:cpu数
    rdd.saveAsTextFile("1")

    sc.stop()
  }


}

saveAsTextFile和textFile

如果是文件和saveAsTextFile,还要看当前文件所占的字节数和分区数相除
比如如果是7个字节的话,如果是2个分区的话,那么7/2=3每个分区里为3个字节
那么有7/3个分区≈3个分区

object Spark_RDD04 {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local").setAppName("RDD")
    val sc = new SparkContext(sparkConf)
    // 不传参的话为min(local, 2)
    // 传参的话,读取方式就是Hadoop的读取方式
    // 计算方式:
    val rdd = sc.textFile("")
    rdd.saveAsTextFile("1")
    sc.stop()
  }

}

你可能感兴趣的:(Spark,java,spring,cloud,架构)