1 ,spark wordCount,idea 中的 maven,scala 项目

1 ,在 idea 中建项目 : maven 项目,scala 代码

  1. 建 mevan 项目 ( 这一步不会做的同学,请自行补习 maven 知识,这里不啰嗦 )
  2. 构建 scala 源码目录
    1 ,在 main 下建目录 ( directory ) : scala
    2 ,右键 scala - make directory as - sources root
  3. pom.xml
<?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>com.heima.sparkTest</groupId>
    <artifactId>sparkTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 配置以下可以解决 在jdk1.8环境下打包时报错 “-source 1.5 中不支持 lambda 表达式” -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- Spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.3.1</version>
        </dependency>
        <!-- SparkSQL -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.3.1</version>
        </dependency>
        <!-- SparkSQL  ON  Hive-->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.11</artifactId>
            <version>2.3.1</version>
        </dependency>
        <!--mysql依赖的jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--SparkStreaming-->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>2.3.1</version>
            <!--<scope>provided</scope>-->
        </dependency>
        <!-- SparkStreaming + Kafka -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
            <version>2.3.1</version>
        </dependency>
        <!-- 向kafka 生产数据需要包 -->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>0.10.0.0</version>
        </dependency>
        <!--连接 Redis 需要的包-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.6.1</version>
        </dependency>

        <!-- Scala 包-->
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.7</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-compiler</artifactId>
            <version>2.11.7</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-reflect</artifactId>
            <version>2.11.7</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>com.google.collections</groupId>
            <artifactId>google-collections</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <!-- 在maven项目中既有java又有scala代码时配置 maven-scala-plugin 插件打包时可以将两类代码一起打包 -->
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- maven 打jar包需要插件 -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <!-- 设置false后是去掉 MySpark-1.0-SNAPSHOT-jar-with-dependencies.jar 后的 “-jar-with-dependencies” -->
                    <!--<appendAssemblyId>false</appendAssemblyId>-->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.bjsxt.scalaspark.sql.windows.OverFunctionOnHive</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


            <!-- 以上assembly可以将依赖的包打入到一个jar包中,下面这种方式是使用maven原生的方式打jar包,不将依赖的包打入到最终的jar包中 -->
            <!--<plugin>-->
            <!--<groupId>org.apache.maven.plugins</groupId>-->
            <!--<artifactId>maven-jar-plugin</artifactId>-->
            <!--<version>2.4</version>-->
            <!--<configuration>-->
            <!--<archive>-->
            <!--<manifest>-->
            <!--<addClasspath>true</addClasspath>-->
            <!--&lt;!&ndash; 指定当前主类运行时找依赖的jar包时 所有依赖的jar包存放路径的前缀 &ndash;&gt;-->
            <!--<classpathPrefix>/alljars/lib</classpathPrefix>-->
            <!--<mainClass>com.bjsxt.javaspark.sql.CreateDataSetFromHive</mainClass>-->
            <!--</manifest>-->
            <!--</archive>-->
            <!--</configuration>-->
            <!--</plugin>-->


            <!-- 拷贝依赖的jar包到lib目录 -->
            <!--<plugin>-->
            <!--<groupId>org.apache.maven.plugins</groupId>-->
            <!--<artifactId>maven-dependency-plugin</artifactId>-->
            <!--<executions>-->
            <!--<execution>-->
            <!--<id>copy</id>-->
            <!--<phase>package</phase>-->
            <!--<goals>-->
            <!--<goal>copy-dependencies</goal>-->
            <!--</goals>-->
            <!--<configuration>-->
            <!--<outputDirectory>-->
            <!--&lt;!&ndash; 将依赖的jar 包复制到target/lib下&ndash;&gt;-->
            <!--${project.build.directory}/lib-->
            <!--</outputDirectory>-->
            <!--</configuration>-->
            <!--</execution>-->
            <!--</executions>-->
            <!--</plugin>-->

        </plugins>
    </build>
</project>

2 ,造数据 :

aa bb cc dd
aa bb cc
aa bb

在这里插入图片描述

3 ,wc 代码 :

package day01.demo01.wc

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Wc {
    def main(args: Array[String]): Unit = {
        //  配置对象
        var conf = new SparkConf()
        //  任务名字
        conf.setAppName("wc")
        //  运行模式
        conf.setMaster("local")
        
        //  spark 上下文 :是通往 spark 集群的唯一通道
        var sc = new SparkContext(conf)
        //  RDD 就是一行一行的数据的集合
        val lines: RDD[String] = sc.textFile("./data/words")
        //  打散,成为一个个的单词
        val words: RDD[String] = lines.flatMap(e => e.split(" "))
        //  变成二元组,每个单词标记为 1
        val wordsAndNums: RDD[(String, Int)] = words.map(e=>(e,1))
        //  计数 ( a :前面的所有 v 的和 ;b:当前 v ; a+b :结果,将前一个结果加上当前值,就是得到的结果  )
        val wordsAndConuts: RDD[(String, Int)] = wordsAndNums.reduceByKey((a:Int, b:Int) => a+b)
        
        //  输出结果
        wordsAndConuts.foreach(println)
        
        //  关闭资源
        sc.stop()
    }
}

4 ,wc 代码简化 :

package day01.demo01.wc

import org.apache.spark.{SparkConf, SparkContext}

object Wc02 {
    def main(args: Array[String]): Unit = {
        //  配置对象
        var conf = new SparkConf()
        //  任务名字
        conf.setAppName("wc")
        //  运行模式
        conf.setMaster("local")
        //  spark 上下文 :是通往 spark 集群的唯一通道
        var sc = new SparkContext(conf)
        
        //  代码逻辑 ( 读文件,切分,单词计数 1,统计单词数量 )
        sc.textFile("./data/words").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).foreach(println)
        sc.stop()
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值