使用Intellij idea编写Spark应用程序(Scala+SBT)

使用Intellij idea编写Spark应用程序(Scala+SBT)

对Scala代码进行打包编译时,可以采用Maven,也可以采用SBT,相对而言,业界更多使用SBT。

运行环境

Ubuntu 16.04

Spark 2.1.0

Intellij Idea (Version 2017.1)

安装Scala插件

安装Scala插件,该Scala插件自带SBT工具。如果已经安装Scala插件,即可跳过此步骤

点击Install,即可安装Scala插件。

构建基于SBT的Scala项目

如下图,按顺序执行如下操作:

新建项目

选择Scala--->SBT

设置项目名,点击Finish即可。

这里需要设置Scala的版本必须2.11.*的版本号。因为Spark 2.0是基于Scala 2.11构建的。这个可以在Spark的官网查到,如下图:

利用SBT 添加依赖包

利用Spark的官网查到Spark artifacts的相关版本号,如下图:

编辑Intellij Idea项目中是build.sbt:

复制代码
name := "SBTTest"version := "1.0"scalaVersion := "2.11.8"libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"

编辑后,Intellij Idea弹出提示,如图:

可以选择Refresh Project手动刷新,也可以选择Enable auto-import让Intellij Idea以后每次遇到build.sbt更新后自动导入依赖包。

这里,选择Enable auto-import.

创建WordCount实例

在Linux系统中新建一个命令行终端(Shell环境),在终端中执行如下命令,新建word.txt测试文件:

复制代码
echo "hadoop hello spark hello world" >> ~/word.txt

在Intellij Idea的src/main/scala项目目录下新建WordCount.scala文件,如下图(注意看图下面的备注):

备注:这里需要注意,在Intellij Idea启动时,会执行"dump project structure from sbt"的操作,也就是把sbt所需要的项目结构从远程服务器拉取到本地,在本地会生成sbt所需要的项目结构。由于是从国外的远程服务器下载,所以,这个过程很慢。这个过程没有结束之前,上图中的"File->New"弹出的子菜单是找不到Scala Class这个选项的。所以,一定要等"dump project structure from sbt"的操作全部执行结束以后,再去按照上图操作来新建Scala Class文件。备注:这里需要注意,在Intellij Idea启动时,会执行"dump project structure from sbt"的操作,也就是把sbt所需要的项目结构从远程服务器拉取到本地,在本地会生成sbt所需要的项目结构。由于是从国外的远程服务器下载,所以,这个过程很慢。这个过程没有结束之前,上图中的"File->New"弹出的子菜单是找不到Scala Class这个选项的。所以,一定要等"dump project structure from sbt"的操作全部执行结束以后,再去按照上图操作来新建Scala Class文件。

新建Scala Class文件的代码如下:

scala 复制代码
import org.apache.spark.SparkContext
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 inputFile =  "file:///home/hadoop/word.txt"
    val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val textFile = sc.textFile(inputFile)
    val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
    wordCount.foreach(println)
  }
}

右键WordCount.scala,选择执行该文件,如下图:

即可在Intellij Idea下面看到输出结果。

相关推荐
o***59279 小时前
解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南
java·tomcat·intellij-idea
合作小小程序员小小店11 小时前
web网页开发,在线%图书管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·后端·mysql·jdk·intellij-idea
深兰科技11 小时前
智融无界·浦绘未来|深兰科技受邀出席“2025浦东新区产业智能化创新发展年度活动”,陈海波发表主旨演讲
人工智能·jupyter·vim·intellij-idea·postman·visual studio·深兰科技
合作小小程序员小小店11 小时前
web网页开发,在线%食堂管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·mysql·html·intellij-idea·jquery
9***Y4813 小时前
Java开发工具IntelliJ IDEA技巧
java·开发语言·intellij-idea
e***877013 小时前
记录 idea 启动 tomcat 控制台输出乱码问题解决
java·tomcat·intellij-idea
发现你走远了13 小时前
2025 idea 指定配置环境运行springboot 设置active和env启动端口,多端口启动 (保姆级图文)
java·spring boot·intellij-idea
IccBoY15 小时前
将idea快捷打开加入到鼠标右键
windows·intellij-idea·idea
合作小小程序员小小店17 小时前
web开发,在线%药店管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·mysql·jdk·html·intellij-idea
灰色人生qwer18 小时前
idea teminal和 window cmd 输出java version不一致
java·ide·intellij-idea