第五章_Spark核心编程_创建Rdd

 


1. 从集合(内存)中创建rdd

复制代码
  //1. 从集合(内存)中创建rdd
  object initRddByList extends App {
    //1. 该对象用于 : Spark应用参数的配置 将Spark的各种参数设置为key,value
    //   note : 1. 一旦一个SparkConf对象被传递给Spark,他就被克隆了,不能再被修改了(不支持运行时修改配置)
    //          2. 这里的配置覆盖了 默认配置和系统属性
    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("initRddByList")

    //2. Spark功能的主要入口
    //       SparkContext表示 与Spark的链接 可以在该集群上创建RDD、accumulators(累加器)、 broadcast variables(广播变量)
    //   note : 1. 每个JVM只能激活一个SparkContext,必须 stop()已存在的,才能创建一个新的
    val sc: SparkContext = new SparkContext(sparkconf)

    //3. 分发一个本地scala集合来形成 RDD
    //  语法 : def parallelize[T](seq: Seq[T], numSlices: Int)(evidence$1: ClassTag[T]): RDD[T]
    //             @param seq Scala collection to distribute
    //             @param numSlices用于划分集合的分区数
    //             @return RDD表示分布式收集
    val list_rdd: RDD[Int] = sc.parallelize(
      List(1, 2, 3, 4)
    )

    // makeRDD 和 parallelize
    val array_rdd: RDD[Int] = sc.makeRDD(
      Array(4, 5, 6, 7)
    )

    //4. 语法 : def collect(): Array[T]
    //      返回 一个包含RDD中所有元素的数组
    //      note : 只能在数据集较小的时候使用,此方法 是将所有分布式节点的RDD元素 收集到 Driver的内存中
    private val array: Array[Int] = list_rdd.collect()
    println(array.mkString(","))

    //关闭资源
    sc.stop()


  }
复制代码

2.1 从外部存储(文件)中 创建rdd (textFile按行读取)

复制代码
  //2.1 从外部存储(文件)中 创建rdd - textFile按行读取
  object initRddByLocalFileByLine extends App {
    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("initRddByLocalFile")

    val sc: SparkContext = new SparkContext(sparkconf)

    //1. 读取 文件系统中的文本文件, 并将其作为String的RDD返回
    //   @param path支持的文件系统中文本文件的路径
    //   @param minPartitions建议RDD的最小分区数
    //   @return RDD的文本文件行
    private val text_rdd: RDD[String] = sc.textFile("Spark_319/src/data/word.txt")

    //private val hdfs_rdd: RDD[String] = sc.textFile("hdfs://gaocun:8020/user/hive/warehouse/person")

    println(text_rdd.collect().mkString(","))

    //println(hdfs_rdd.collect().mkString(","))

    //关闭资源
    sc.stop()


  }
复制代码

2.2 从外部存储(文件)中 创建rdd (wholeTextFiles 按文件读取)

复制代码
 //2.2 从外部存储(文件)中 创建rdd - wholeTextFiles 按文件读取
  object initRddByLocalFileByFile extends App {
    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("initRddByLocalFile")

    val sc: SparkContext = new SparkContext(sparkconf)

    //1. 读取 文件系统中的文本文件, 并将其作为(文件路径,文件内容)的RDD返回
    //   语法 : def wholeTextFiles(path: String, minPartitions: Int): RDD[(String, String)]
    //   @param 输入文件的目录,多文件路径时 用,分割
    //   @param minPartitions建议RDD的最小分区数
    //   @return RDD表示 文件路径和相应文件内容的元组 即 ("File Path","File xxx")
    private val file_rdd: RDD[(String, String)] = sc.wholeTextFiles("Spark_319/src/data")

    println(file_rdd.collect().mkString(","))

    //关闭资源
    sc.stop()


  }
复制代码

 2.3  分发一个本地集合,形成一个RDD

复制代码
* TODO 方式1: 分发一个本地集合,形成一个RDD
*     makeRDD 或 parallelize
*     SparkContext.makeRDD(seq,分区数):RDD[T]
*         seq: Seq[T]  scala集合
*         numSlices: Int = defaultParallelism  指定分区个数,不指定时使用默认分区个数
*     note:
*         1. 分区数不指定时,默认使用 defaultParallelism-默认分区数
*         2. 生成RDD的元素的数据类型和 集合的数据类型一致
* */

/* 分发一个本地集合,形成一个RDD */
object CreateRddWithList {
  def main(args: Array[String]): Unit = {
    val sc: SparkContext = CommonUtils.getSparkContext("分发一个本地集合,形成一个RDD")

    val list: List[String] = List("金", "🌲", "💧", "🔥", "土")

    val rdd1: RDD[String] = sc.makeRDD(list)
    val rdd2: RDD[String] = sc.makeRDD(list, 4)

    val rdd3: RDD[String] = sc.parallelize(list)
    val rdd4: RDD[String] = sc.parallelize(list, 4)

    rdd1.collect.foreach(println(_))

    sc.stop()
  }
}
复制代码

2.4  指定范围 创建RDD[Long]

复制代码
* TODO 方式2: 指定范围 创建RDD[Long]
*     SparkContext.range(start,end,step,numSlices): RDD[Long]
*         start: Long, 起始位置
*         end: Long, 结束位置,不包括该位置
*         step: Long = 1, 步伐
*         numSlices: Int = defaultParallelism 分区个数,不指定时使用默认分区数
*     note:
*         常用来造数据

/* 指定范围 创建RDD[Long] */
object CreateRddWithRange {
  def main(args: Array[String]): Unit = {
    val sc = CommonUtils.getSparkContext("指定范围 创建RDD[Long]")

    val rdd: RDD[Long] = sc.range(0, 10)

    rdd.collect().foreach(println(_))

    sc.stop()

  }
}
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 






posted @   学而不思则罔!  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示