参考: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>