Intellij Idea 编写 Scala Spark 程序
准备工作
安装 Java
C:\Users\Lin>java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
安装 SBT (Scala Build Tool,类似 Maven,如果使用 Intellij Idea 可以不用安装)
https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Windows.html
安装 Intellij Idea
安装 Scala 插件
安装成功
Intellij 创建 Scala + IDEA 项目
建立项目
选择 Scala + IDEA
第一次建立 Scala 项目,需要 Create Scala SDK
如果是写 Spark 程序的话,要注意和 Spark 的 Scala 版本一致(以 Spark 2.4.6 为例选 2.11.12)
建立 Scala Class
选择 Object
代码
object Hello {
def main(args: Array[String]) {
println("Hello Scala!")
}
}
或者
object Hello extends App {
println("Hello, World!")
}
右键文件 -> Run
可以看到输出 Hello Scala
Intellij 创建 Scala + sbt 项目
为了更好的管理项目依赖,需要创建 sbt 的项目
https://docs.scala-lang.org/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.html
同样选择 Scala 版本
创建后可以看 sbt shell 是否可以正常启动
如不行,可在 File->Settings->Build,Execution,Deployment->Build Tools->sbt 选自己装的 sbt-launch.jar
在 build 界面可以看到可能会卡住(正常也需要 5 分钟左右的时间)
有可能是因为源的问题,到 ~\.sbt 目录下,创建 repositories 文件,换成速度快的源,比如
[repositories]
local
my-maven-repo: https://maven.aliyun.com/repository/public
typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
maven-central
sonatype-oss-snapshots
可能要到 File -> Settings -> Build, Execution, Deployment -> Build Tools -> sbt -> VM parameters 添加
-Dsbt.override.build.repos=true
-Dsbt.repository.config=~/.sbt/repositories
(但我没做这步,重启 IDEA 重新编译就可以了)
成功后,右键 -> New 下面才会有 Scala Class 可以选
代码
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.log4j.{Level, Logger}
object WordCount {
def main(args: Array[String]) {
//Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
//Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
val sc = new SparkContext(conf)
val inputFile = "./src/main/scala/WordCount.scala"
val textFile = sc.textFile(inputFile)
// don't need to escape }, ], /
// regexp should be \s, but in order to escape \, have to change to \\s
val regex = "\\s+|\\.|\\(|\\)|\\{|}|\\[|]|/|\\\\|\"|\\||,|:"
val wordCount = textFile.flatMap(line => line.split(regex))
.filter(word => word != "")
.map(word => (word, 1))
.reduceByKey((x, y) => x + y)
wordCount.foreach(println)
}
}
添加 spark 依赖
name := "structured-spark-kafka-example"
version := "0.1"
scalaVersion := "2.11.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.6"
运行
可以看到输出结果
(Level,3)
(=,6)
(scala,2)
(s,2)
(!=,1)
(server,1)
(args,1)
(textFile,3)
(don't,1)
(WordCount,3)
(s+,1)
(spark,3)
(x,2)
(import,3)
(log4j,1)
(main,2)
(need,1)
(flatMap,1)
(have,1)
(be,1)
(conf,2)
(y,2)
(filter,1)
(local,1)
(setMaster,1)
(wordCount,2)
(line,2)
(OFF,1)
(order,1)
(Array,1)
(split,1)
(to,4)
(setLevel,2)
(val,6)
(inputFile,2)
(in,1)
(2,1)
(object,1)
(foreach,1)
(regex,2)
(map,1)
(should,1)
(apache,4)
(eclipse,1)
(org,5)
(escape,2)
(jetty,1)
(regexp,1)
(word,4)
(println,1)
(setAppName,1)
(String,1)
(reduceByKey,1)
(=>,4)
(sc,2)
(1,1)
(new,2)
(but,1)
(def,1)
(src,1)
(SparkConf,2)
(WARN,1)
(+,1)
(getLogger,2)
(SparkContext,2)
(change,1)
(Logger,3)
修改 build.sbt 后,如果没有自动重 build,可以在右侧的 sbt 窗口点击 reimport project
如果还不重 build 或出错,尝试重启 IDEA
导入已有的 sbt 项目
如果是导入已有的项目,可以通过 Import Project,选择对应的 build.sbt
然后编译运行
打包并通过 spark-submit 提交
如果有安装 sbt 的话可以直接执行
sbt package
或者打开 IDEA 的 sbt shell 窗口,直接在上面执行 package 命令
然后可以在 target\scala-2.11 目录下找到 jar 包比如 word-count_2.11-0.1.jar
通过 spark-submit 命令提交 spark 程序
./spark-submit --master local \
--class WordCount \
word-count_2.11-0.1.jar
如果程序是指定 package 的,并且可以输入参数的,命令如下
./spark-submit --master local \
--class com.example.WordCount \
word-count_2.11-0.1.jar \
input.txt
可以看到程序成功执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界