spark通过jar包实现·wordcount
时间: 2025-07-06 09:49:33 浏览: 11
### 使用 Spark 和 JAR 包实现 WordCount 示例
#### 创建 Maven 或 SBT 项目结构
为了构建可执行的 JAR 文件,首先需要创建一个基于 Maven 或者 SBT 的 Scala 项目。这允许通过定义依赖关系来简化外部库(如 Apache Spark)的管理。
对于 Maven,在 `pom.xml` 中添加如下配置[^4]:
```xml
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.x.x</version> <!-- 替换成最新稳定版 -->
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>4.x.x</version>
<executions>
...
</executions>
</plugin>
</plugins>
</build>
```
而对于 SBT,则是在 `build.sbt` 添加:
```sbt
name := "Simple Project"
version := "1.0"
scalaVersion := "2.12.17" // 根据需求调整版本号
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.x.x"
```
#### 编写 WordCount 主类
接下来在一个新的 Scala 对象文件里编写核心逻辑:
```scala
import org.apache.spark.{SparkConf, SparkContext}
object SimpleApp {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("simple-application")
.setMaster("local[*]") // 设置本地模式运行
val sc = new SparkContext(conf)
try {
val textFile = sc.textFile("README.md") // 可替换为其他文本路径
val counts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
counts.foreach(println)
} finally {
sc.stop()
}
}
}
```
这段代码初始化了一个 Spark 上下文,并读取指定位置的文字数据源作为输入。接着利用 flatMap 将每一行拆分成单词列表;再映射成键值对形式 `(word, count)` 并聚合相同 key 下面所有的 value 值相加得到最终统计结果[^2]。
#### 构建打包命令
当所有编码工作完成后就可以准备编译打包了。如果是采用 maven 则可以通过 mvn package 来生成 jar-with-dependencies 形式的 fat-jar 。而 sbt 用户则可以直接调用 assembly 插件完成同样的事情。
#### 提交作业到集群
最后一步就是把刚刚制作好的应用程序部署至目标环境中去执行。如果是在本地测试的话只需简单地借助 spark-submit 工具即可:
```bash
$SPARK_HOME/bin/spark-submit \
--class "SimpleApp" \
target/scala-2.12/simple-project_2.12-1.0.jar
```
这里假设已经成功构建出了名为 simple-project_x.xx-x.y.z.jar 的产物并且位于项目的 target 子目录之下[^3]。
阅读全文
相关推荐


















