我習慣用Maven項目 所以用IDEA新建一個Maven項目
下面是pom文件 我粘上來吧
<?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</groupId> <artifactId>ScalaMavenTest2</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <encoding>UTF-8</encoding> <scala.version>2.11.8</scala.version> <scala.compat.version>2.11</scala.compat.version> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.11</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.5</version> </dependency> </dependencies> <!-- 指定插件--> <build> <plugins> <!--編譯java的插件--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> </plugin> <!-- 指定編譯scala的插件 --> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.2.2</version> </plugin> <!-- maven打包的插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>reference.conf</resource> </transformer> <!-- 指定main方法 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass></mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
代碼如下
import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]): Unit = { //設置配置文件和名字 val conf = new SparkConf().setAppName("wordConut") //生成Spark的上下文 val sc = new SparkContext(conf) //傳入文件 val rdd = sc.textFile(args(0)) //先用split()按照空格進行分詞 在通過flatMap對分割的單詞進行展評,展評完畢后 使用map(x=>(x,1))對每個單詞 //計數1最后使用ReduceByKey(_+_) 根據Key也就是單詞進行計數 這是一個Shuffer過程 val wordcount = rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_) //先使用map(x=>(x._2,x._1))對單詞結果的k V 進行轉換然后通過sortByKey(false)根據K V也就是詞頻進行排序 false要求 //按照倒序進行排列,最后再次通過map(x=>(x._2,x._1))讓 K V 再次進行互換 形成最后結果 val wordsort = wordcount.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)) //寫出路徑 wordsort.saveAsTextFile(args(1)) sc.stop() } }
之后設置參數 指定master 和文件所在目錄 和輸出目錄
成功之后的結果