一、pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Spark01</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.5.2</version>
</dependency>
</dependencies>
</project>
二、代码示例:
package com.care.spark01.operate;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import java.util.Arrays;
import java.util.List;
public class Spark02_Operate_Transfrom_Map_1 {
public static void main(String[] args) {
final SparkConf conf = new SparkConf();
conf.setMaster("local");
conf.setAppName("spark");
final JavaSparkContext jsc = new JavaSparkContext(conf);
//TUDO RDD的方法
// RDD的处理方盒和Java IO流完全一样,也采用装饰者模式来实现功能的
final List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
final JavaRDD<Integer> rdd = jsc.parallelize(nums,2);
// TODO JDK1.8来自于Scala语音,由马丁引入,能省则省
/*
final JavaRDD<Integer> map = rdd.map(new Function<Integer, Integer>() {
@Override
public Integer call(Integer in) throws Exception {
return in * 2;
}
});*/
// TODO 如果Java中接口采用注释@FunctionInterface声明,那么接口的使用就可以采用JDK提供的函数式编程的语法实现(λ表达式)
// 1. return 可以省略
// 2. 分号 可以省略 : 可以采用换行的方式代表代码逻辑
// 3. 大括号 可以省略 : 如果我们的逻辑代码只有一行
// 4. 小括号 可以省略 : 参数列表中的参数只有一个
// 5. 参数和箭头 可以省略 : 参数在逻辑中只使用了一次(需要有对象来实现功能)
// final JavaRDD<Integer> map = rdd.map(num -> num * 2);
final JavaRDD<Integer> map = rdd.map(NumberTest::mul2);
map.collect().forEach(System.out::println);
jsc.close();
}
}
class NumberTest{
public static int mul2(Integer a){
return a * 2;
}
}
三、运行结果: