这些示例简要地概述了Spark API。Spark是基于分布式数据集的概念构建的,它包含任意的Java或Python对象。您可以从外部数据创建数据集,然后对其应用并行操作。Spark API的构建块是它的RDD API。在RDD API中,有两种类型的操作:转换,它定义了基于之前的一个新的数据集,以及操作,它启动了一个任务,在集群上执行。除了Spark的RDD API之外,还提供了高级API,例如DataFrame API和机器学习API。这些高级api提供了一种简洁的方式来进行某些数据操作。在这个页面中,我们将使用RDD API以及使用高级API的示例来展示示例。
一、运行环境
运行环境, Eclipse, Java 1.8版本,且 Maven 项目。语言:java
spark 2.2.0
pom.xml 的配置
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
依赖库有2个,一个是 spark-core_2.11-2.2.0和 spark-sql_2.11-2.2.0二、源代码架构
1、定义配置。 配置在本地运行。
运行模式有好几种,分别是:
- local 本地单线程
- local[K] 本地多线程(指定K个内核)
- local[*] 本地多线程(指定所有可用内核)
- spark://HOST:PORT 连接到指定的 Spark standalone cluster master,需要指定端口。
- mesos://HOST:PORT 连接到指定的 Mesos 集群,需要指定端口。
- yarn-client客户端模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。
- yarn-cluster集群模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。
SparkConf conf=new SparkConf().setMaster("local").setAppName("JavaWordCount");
2、定义 SparkContext
SparkContext sc=new SparkContext(cont);
3、最后定义本次的 Session
SparkSession spark=SparkSession.builder().sparkContext(sc).getOrCreate();
三、源程序
package wangxn.wordcount;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.rdd.RDD;
import org.apache.spark.sql.SparkSession;
import scala.Tuple2;
public class JavaWordCount {
private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
if (args.length < 1) {
System.err.println("Usage: JavaWordCount <file>");
System.exit(1);
}
SparkConf conf=new SparkConf().setMaster("local")
.setAppName("JavaWordCount");
SparkContext sc=new SparkContext(conf);
SparkSession spark=SparkSession.builder().sparkContext(sc).getOrCreate();
// .appName("JavaWordCount").getOrCreate();
JavaRDD<String> lines=spark.read().textFile(args[0]).javaRDD();
JavaRDD<String> words = lines.flatMap(s -> Arrays.asList(SPACE.split(s)).iterator());
JavaPairRDD<String, Integer> ones = words.mapToPair(s -> new Tuple2<>(s, 1));
JavaPairRDD<String, Integer> counts = ones.reduceByKey((i1, i2) -> i1 + i2);
List<Tuple2<String, Integer>> output = counts.collect();
for (Tuple2<?,?> tuple : output) {
System.out.println(tuple._1() + ": " + tuple._2());
}
spark.stop();
}
}
四、运行的时候需要定义参数,可以在开发环境的 Run Configuartions 中定义
1、开发环境运行。
2、生成可运行的 Jar 文件,使用命令行方式运行。