大数据生态系统基础:Apache Spark(三):Java 版本编程实例(WordCount)

       这些示例简要地概述了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 文件,使用命令行方式运行。

  

    


















发布了52 篇原创文章 · 获赞 4 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/caridle/article/details/76993329