返回 导航

Spark

hangge.com

Intellij IDEA - 搭建Spark开发环境教程(附:Scala编程样例)

作者:hangge | 2023-09-18 09:50
    我在之前的文章中写过如何搭建部署 Spark 运行环境,本文接着演示如何使用 Intellij IDEA 这个开发工具进行 Spark 程序的开发与调试。

1,准备工作

(1)首先本地需要安装好 Java 8 JDK,并设置 JAVA_HOME 环境变量。
(2)接着安装 Intellij IDEA 这个开发工具。

2,安装 Scala 插件

(1)由于 SparkScala 语言开发的,所以我们开发所使用的语言也为 Scala。打开 Intellij IDEA 的插件市场,搜索 scala 插件并安装,安装完之后重启 IDE

(2)点击“新项目的项目结构”(Structure for New Projects)菜单,在“全局库”(Global Libraries)选项卡下点“+”后选择 Scala SDK
提示:如果不知道这个菜单在哪,可以双击 shift 键,在弹出的搜索框中输入关键字搜索。

(3)然后会弹出如下界面,我们根据 Spark 版本选择响应合适的 Scala 版本进行下载。比如我使用的 Spark 3.4.0,则对应的 Scala 版本则是 2.13
提示:关于各个版本 SparkScala 对应关系,可以访问 Apache Spark 官网查看(点击访问)。 

(4)下载完之后,在“全局库”(Global Libraries)里就有这个 sdk 了,然后我们右键点击这个 sdk,然后点击“复制到项目库”(Copy to Project Libraries)后确定。

3,创建 Maven 项目

(1)我们使用 IDEA 新建一个 Maven 项目:

(2)项目创建后,我们要将 Scala 的框架添加到这个项目中。在项目名称上右键菜单中点击“添加框架支持”(Add Framework Support…),然后在打开的对话框左侧边栏中,勾选 Scala 前面的复选框,然后点击确定即可。
提示:如果没有找到“添加框架支持”这个菜单项,可以参考我写的另一篇文章:IntelliJ IDEA - 解决没有“添加框架支持”(Add Framework Support)选项问题

(3)在 main 文件夹中建立一个名为 scala 的文件夹,并右键点击 scala 文件夹,选择“将目录标记为”(Make Directory as),然后选择“源代码根目录”(Sources Root)。这个操作的作用是将 scala 文件夹标记为一个源文件的根目录,然后在其内的所有代码中的 package ,其路径就从这个根目录下开始算起。

(4)测试一下 Scala 程序是否能够正常运行。 右键点击 scala 文件夹新建一个 Scala 类,随后设置好程序的名称,并且将其设置为一个 Object

(5)该类的代码如下:
object Hello {
  def main(args: Array[String]):Unit = {
    println("hello hangge.com")
  }
}

(6)运行后可以看到控制台输出如下内容,说明一切正常。

4,添加 Spark 依赖

(1)打开项目的 pom.xml 文件,添加如下高亮部分的内容:
注意:下面依赖中只有 spark-core 是必须的,其他依赖库可以再后续用到时再添加。同时这里我还添加了个阿里云仓库的依赖,用于提高依赖包的下载速度。
<?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>org.example</groupId>
    <artifactId>spark</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spark.version>3.4.0</spark.version>
        <scala.version>2.13</scala.version>
    </properties>

    <repositories>
        <repository>
            <id>alimaven</id>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>alimaven</id>
            <url>https://maven.aliyun.com/repository/public</url>
        </pluginRepository>
    </pluginRepositories>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
    </dependencies>

</project>

(2)我们对上面创建的 Scala 测试类进行修改,编写一个简单的 Spark 程序,对集合数据进行转换然后输出。具体代码如下:
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Hello {
  def main(args: Array[String]):Unit = {
    // 创建 Spark 运行配置对象
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Hello")
    // 创建 Spark 上下文环境对象(连接对象)
    val sc : SparkContext = new SparkContext(sparkConf)
    // 创建RDD(通过集合)
    val rdd1: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))
    // 对数据进行转换
    val rdd2: RDD[Int] = rdd1.map(_+1)
    // 打印结果
    rdd2.collect().foreach(println)
    //关闭 Spark
    sc.stop()
  }
}

(3)运行后控制台将会输出如下内容:
评论

全部评论(0)

回到顶部