目录
1、RDD方法综述
a、RDD共包含两种计算方式,一种是transformations转换,一种是actions操作,每种计算方式包含一些常用的方法。
注意:Transformations转换是Lazy的,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spark在遇到Transformations转换时只会记录需要这样的转换,并不会去执行,需要等到有Actions操作的时候才会真正启动计算过程进行计算。写代码的时候,一定要特别注意,基本是新手必踩的坑!!!
b、如果一个RDD需要多次调用,还可以使用持久化方法,将RDD持久化到内存或者磁盘中,该RDD再次调用时,就无需重复计算。
c、如果想在Driver和Executors之间共享大容量的变量或者使用累加器,可以采用Broadcast和Accumulator。
2、RDD创建
具体步骤如下:
a、新建Maven工程,在pom.xml文件中引入Spark的依赖包,以便能使用Spark提供的功能
b、初始化入口对象
#1)初始化SparkConf对象,SparkConf包含了Spark集群配置的各种参数。
#2)基于SparkConf对象初始化SparkSession对象。
#3)基于SparkSession对象创建JavaSparkContext对象,用于与集群资源管理器做交互
c、创建RDD
共两种方式
#1) 通过列表创建RDD
#2) 通过HDFS/AFS路径创建RDD
3、transformations转换方法
a、函数体采用Lambda表达式
RDD的转换方法涉及的func函数操作可以采用Lambda表达式,写法便捷。Lambda表达式是Java SE 8中一个重要的新特性。
Lambda表达式的格式如下:
#1) 单个参数
格式:参数 -> { 处理代码块 }
#2)多个参数
格式:(参数1, 参数2, 参数...) -> { 处理代码块 }
从下图可以看出,采用lambda表达式代码比以往的匿名函数的方式,写法更简洁
b、常用方法
我们创建两个RDD (firstRDD 和 secondRDD)作为示例,讲解常用的转换方法。
方法名 | 方法描述 | 代码示例 |
---|---|---|
flatMap(func) | 实现一行转多行。 作用于RDD的每一行,产出新的RDD每行为迭代器的一个元素。
|
|