RDD的创建与分区
1.RDD的创建
在Spark中创建RDD的创建方式可以分为三种:从集合中创建RDD、从外部存储创建
RDD、从其他RDD创建。
a)新建一个 maven 工程 SparkCoreTest
b)添加 scala 框架支持
c)创建一个scala文件夹,并把它修改为Source Root
d)在pom文件中添加:
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<build>
<finalName>SparkCoreTest</finalName>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.6</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
①从集合中创建RDD
package com.xiao_after.createadd
import org.apache.spark.rdd.RDD
import org.apache.spark.{
SparkConf, SparkContext}
/**
* @author xiaohu
* @create 2020-09-24 18:17
*/
object createadd01_array {
def main(args: Array[String]): Unit = {
//1.创建SparkConf并设置App名称
val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
//2.创建SparkContext,该对象是提交Spark App的入口
val sc: SparkContext = new SparkContext(conf)
//3.使用parallelize()创建rdd
val rdd1: RDD[Int] = sc.parallelize(Array(1, 2, 3, 4, 5, 6, 7, 8))
//遍历rdd1
rdd1.collect().foreach(println)
println("----------------------------------")
//4.使用makeRDD()创建rdd
val rdd2: RDD[Int] = sc.makeRDD(Array(1, 2, 3, 4, 5, 6, 7, 8))
//遍历rdd2
rdd2.collect().foreach(println)
//5.关闭连接
sc.stop()
}
}
注:源码中 makeRDD 方法调用的是 parallelize 方法,但是二者并不完全相等。
②从外部存储创建RDD
由外部存储系统的数据集创建RDD包括:本地的文件系统,还有所有Hadoop支持的数据
集,比如HDFS、HBase等。
数据准备:在新建的SparkCoreTest项目名称上右键 =》新建input文件夹=》在input文件
夹上右键=》分别新建1.txt和2.txt。每个文件里面准备一些word单词。
package com.xiao_after.createadd
import org.apache.spark.rdd.RDD
import org.apache.spark.{
SparkConf, SparkContext}
/**
* @author xiaohu
* @create 2020-09-24 18:27
*/
object createadd02_file {
def main(args: Array[String]): Unit = {
//1.创建SparkConf并设置App名称
val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
//2.创建SparkContext,该对象是提交Spark App的入口
val sc: SparkContext = new SparkContext(conf)
//3.读取文件。如果是集群路径:hdfs:hadoop102:9000/input
val rdd: RDD[String] = sc.textFile("D:\\MyselfPractice\HdfsClientDemo\\SparkCoreTest\\input\\1.txt")
//4.遍历打印
rdd.collect().foreach(println)
//5.关闭连接
sc.stop()