idea开发第一个spark程序---统计文本单词数

在创建项目之前确保自己本地安装好了scala环境和java环境,因为spark是scala编写的,scala和java一样都是需要编译成字节码,然后在JVM里面运行。我本地的scala版本是2.11.0版本,hadoop是2.7.6版本

第一步:打开idea,然后创建一个maven项目

在pom里面加入如下依赖:

   
        2.3.1
        2.11
        20-SNAPSHOT
    


    
        
            org.apache.spark
            spark-core_${scala.version}
            ${spark.version}
        
        
            org.apache.spark
            spark-streaming_${scala.version}
            ${spark.version}
        
        
            org.apache.spark
            spark-sql_${scala.version}
            ${spark.version}
        
        
            org.apache.spark
            spark-hive_${scala.version}
            ${spark.version}
        
        
            org.apache.spark
            spark-mllib_${scala.version}
            ${spark.version}
        
        
            org.apache.hadoop
            hadoop-client
            2.7.6
        
        
            org.apache.spark
            spark-streaming-kafka_${scala.version}
            1.6.3
        
        
            com.esri.geometry
            esri-geometry-api
            1.2.1
        
        
            com.googlecode.json-simple
            json-simple
            1.1.1
        
    

    
        

            
                org.scala-tools
                maven-scala-plugin
                2.15.2
                
                    
                        
                            compile
                            testCompile
                        
                    
                
            

            
                maven-compiler-plugin
                3.6.0
                
                    1.8
                    1.8
                
            

            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.19
                
                    true
                
            

        
    

第二步:在编辑器点击File-->Project Structure 点击下图的Scala SDK,浏览进入本地的scala安装位置,导入scala库

idea开发第一个spark程序---统计文本单词数_第1张图片

第三步:书写java版的类:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;
import scala.Tuple2;

import java.util.Arrays;
import java.util.Iterator;

/**
 * Created by zhanglu on 2018/9/7.
 */
public class WordCount {
    public static void main(String[] args) {
//        编写spark程序
//        第一步:创建sparkConf对象,设置spark的配置信息
        SparkConf sparkConf=new SparkConf();
        sparkConf.setAppName("WordCount");
        sparkConf.setMaster("local");
//        第二步:创建javaSparkContext对象,初始化spark的各种组件
        JavaSparkContext javaSparkContext=new JavaSparkContext(sparkConf);
//        第三步:针对输入的数据源(hdfs,本地文件)创建一个RDD,输入数据会分配到RDD的各个分区上面
//        形成一个初始的分布式数据集。textFile()通过输入数据的类型创建RDD,文件里面的每一行就相当于RDD里面的每一个元素
        JavaRDD javaRDD=javaSparkContext.textFile("E://个人/word_count.txt");
//        第四步:对初始的RDD进行transformation,就是计算操作
//        将每一行元素拆成单个单词,通常操作会通过创建一个function,并配合RDD的map.flatMap等算子来操作
        JavaRDD counts=javaRDD.flatMap(new FlatMapFunction() {
            private static final long serialVersionUID=1L;
            @Override
            public Iterator call(String s) throws Exception {
                return Arrays.asList(s.split(" ")).iterator();
            }
        });
//        将每个单词映射成(单词,1)的tuple形式
        JavaPairRDD pairs=counts.mapToPair(new PairFunction() {
            private static final long serialVersionUID=1L;
            @Override
            public Tuple2 call(String s) throws Exception {
                return new Tuple2(s,1);
            }
        });
//        将上面tuple进行reduce操作,迭代计算
        JavaPairRDD wordCounts=pairs.reduceByKey(new Function2() {
            private static final long serialVersionUID=1L;
            @Override
            public Integer call(Integer integer, Integer integer2) throws Exception {
                return integer+integer2;
            }
        });

//               以上flatMap和mapToPair和reduceBykey都是transformation操作,spark程序还需要action操作,程序才可以执行
        wordCounts.foreach(new VoidFunction>() {
            private static final long serialVersionUID=1L;
            @Override
            public void call(Tuple2 stringIntegerTuple2) throws Exception {
                System.out.println(stringIntegerTuple2._1+" appeared "+stringIntegerTuple2._2+" times ");
            }
        });
        javaSparkContext.close();
    }
}

 

 

你可能感兴趣的:(大数据)