第五章_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() } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?