主要做的是就是将一个已有的RDD生成另外一个RDD。Transformation具有lazy特性(延迟加载)。Transformation算子的代码不会真正被执行。只有当我们的程序里面遇到一个action算子的时候,代码才会真正的被执行对
1.1一个RDD进行转换操作
举例:对一个数组为{1, 2, 3, 3}的RDD进行基本的RDD转化操作
函数名 |
含义 |
示例 |
结果 |
map(func) |
返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成 |
rdd.map(x => x + 1) |
{2, 3, 4, 4} |
flatMap() |
将函数应用于RDD 中的每个元素,将返回的迭代器的所有内容构成新的RDD。通常用来切分单词 |
rdd.flatMap(x->Arrays.asList(x.split(",")).iterator()) |
{1, 2, 3,3} |
parallelize() |
使用已经存在的迭代器或者集合通过调用spark驱动程序提供的parallelize函数来创建并行集合 |
JavaRDD<String> rdd = jsc.parallelize(Arrays.asList("haimie","jojo")); |
|
filter() |
返回一个由通过传给filter()的函数的元素组成的RDD |
rdd.filter(x->x!=1) |
{2,3,3,} |
distinct() |
去重 |
rdd.distinct() |
{1,2,3} |
sample(s,faraction,[seed]) |
对RDD采样,以及是否替换 |
rdd.sample(false,0.5) |
非确定的 |
Java实现
import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.sql.SparkSession; /** * @author sjy on 2019-12-19 * @version 1.0 */ public class SparkCoreApiMaster {
private static JavaSparkContext jsc; public static void main(String[] args) {
SparkConf conf = new SparkConf(); SparkSession session = new SparkSession.Builder() .config(conf) .appName( "RunModifyiedFilm:shengjunyang@maoyan.com" ).master( "local" ) .getOrCreate(); jsc = new JavaSparkContext(session.sparkContext()); SparkApiCore master = new SparkApiCore(); master.testSparkCoreApiMap(jsc); } } |
1.1.1Map
单个RDDmap 折叠源码
import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.Function; import java.io.Serializable; import java.util.Arrays; /** * @author sjy on 2019-12-19 * @version 1.0 */ public class SparkApiCore implements Serializable {
public void testSparkCoreApiMap(JavaSparkContext jsc) {
JavaRDD<String> rdd = jsc.parallelize(Arrays.asList( "a" , "b" , "c" )); // 构造数据源,String的数据 //java表达式 JavaRDD<String> logData = rdd.map((Function<String, String>) v1 -> v1+ "!" ); //lamda形式 等效 System.out.println( "----MapAPI start----" ); logData.collect().stream().forEach(s-> System.out.println(s.toString())); System.out.println( "----MapAPI end----" ); logData = rdd.map(p -> p + '!' ); System.out.println( "----MapAPI start----" ); logData.collect().stream().forEach(s-> System.out.println(s.toString())); System.out.println( "----MapAPI end----" ); } } |
执行结果:
----MapAPI start----
a!
b!
c!
----MapAPI end----
1.1.2FlatMap
单个RDDflatMap 折叠源码
import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.Function; import java.io.Serializable; import java.util.Arrays; /** * @author sjy on 2019-12-19 * @version 1.0 */ public class SparkApiCore implements Serializable {
/** * fl
|