返回 导航

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 前面的复选框,然后点击确定即可。

(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)

回到顶部