【DataWhale-Spark】2.2-第一个Spark应用程序:WordCount

参考:Spark中文文档 

由于我喜欢在Windows上面写代码,完成后再扔到Linux中运行,所以本次代码都在Windows上完成

1、使用命令行shell的方式:

若通过命令启动Spark,则需要环境变量中配置SPARK_HOME,然后加入到path中%SPARK_HOME%

注:配置变量时不要将bin目录配置进去,否则会出现系统找不到指定的路径,然后打开Spark后一闪而过的情况

因为打开spark-shell.cmd时会调用spark-shell2.cmd

而spark-shell2.cmd会去Spark_Home中寻找bin文件夹

因此配置到spark目录即可

出现上面报错是因为Hadoop中缺少文件

注:如果环境变量中配置了Spark_Home,则必须配置Hadoop_Home,否则在数据处理时会报错

因此不去配置环境变量,直接点击spark-shell文件打开就好

启动成功后,出现Scala即可开始写代码了

第一个WordCount应用程序,就如我们使用Java写出Hello World一样具有里程碑的意义。

在D盘创建一个文件,名为sparkFile.txt

内容为:

hello Spark
hi BigData

代码

val textFile = spark.read.textFile("D:\\SparkFile.txt")

textFile.count()

--文件包含Spark的个数,计算词频
textFile.filter(line => line.contains("Spark")).count()

2、使用IDEA(推荐,尽量不要使用shell开发,很累很麻烦)

个人觉得这篇 如何使用IDEA开发Spark程序 讲的挺详细的,故不再赘述

Spark代码

package SparkProjects
import org.apache.spark.{SparkConf,SparkContext}
object WordCount {
  def main(args: Array[String]): Unit = {
    //创建spark配置对象
    val conf = new SparkConf()
    //设置master属性
    //启动本地计算
    conf.setMaster("local")
    //设置本程序名称
    conf.setAppName("WordCount")
    //通过conf创建sc
    val sc = new SparkContext(conf)
    //书写单词计数程序,使用项目相对路径
    val textFile = sc.textFile("SparkFile.txt")
    val wordCount = textFile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
    wordCount.foreach(println)
    println(wordCount.count())
  }
}

计算结果如下:

19/08/09 14:48:16 INFO ShuffleBlockFetcherIterator: Started 0 remote fetches in 13 ms
(Spark,1)
(hi,1)
(hello,1)
(BigData,1)

..........................
..........................


19/08/09 14:48:16 INFO DAGScheduler: Job 1 finished: count at WordCount.scala:18, took 0.080119 s
4
19/08/09 14:48:16 INFO SparkContext: Invoking stop() from shutdown hook

需要注意的是项目配置Maven时的Spark版本 artifactId(上方代码没有用到sql、csv):

<?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>SparkProjects</groupId>
    <artifactId>SparkLearning</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.databricks/spark-csv -->
        <dependency>
            <groupId>com.databricks</groupId>
            <artifactId>spark-csv_2.11</artifactId>
            <version>1.5.0</version>
        </dependency>

    </dependencies>
</project>
原创文章 88 获赞 41 访问量 16万+

猜你喜欢

转载自blog.csdn.net/Damionew/article/details/98954663