Spark,IDEA编写Maven项目

以下是在IDEA中使用Maven构建Spark项目的步骤:

一、环境准备

  1. 安装JDK
  • 确保IDEA配置了JDK 8+(推荐11+)。
  1. 安装Maven
  • 配置Maven环境变量,IDEA中设置Maven路径( File > Settings > Build > Maven )。
  1. 下载Spark依赖
  • 无需本地安装Spark,通过Maven引入依赖。

二、创建Maven项目

  1. 新建项目
  • 在IDEA中选择 Create New Project > Maven > 勾选Create from archetype > 选择 maven-archetype-quickstart ,点击下一步。
  1. 配置项目信息
  • 填写GroupId(如 com.example )、ArtifactId(如 spark-demo ),选择存储路径。

三、编写 pom.xml 文件

添加Spark和Scala依赖(以Spark 3.5.0为例):

xml

<?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>com.example</groupId>

<artifactId>spark-demo</artifactId>

<version>1.0-SNAPSHOT</version>

<!-- 声明Scala插件 -->

<properties>

<scala.version>2.12.17</scala.version>

<spark.version>3.5.0</spark.version>

<maven.compiler.source>11</maven.compiler.source>

<maven.compiler.target>11</maven.compiler.target>

</properties>

<!-- 依赖 -->

<dependencies>

<!-- Spark Core -->

<dependency>

<groupId>org.apache.spark</groupId>

<artifactId>spark-core_${scala.version}</artifactId>

<version>${spark.version}</version>

<!-- 开发时使用local模式,无需打包进最终JAR -->

<scope>provided</scope>

</dependency>

<!-- Spark SQL(按需添加其他模块,如spark-streaming) -->

<dependency>

<groupId>org.apache.spark</groupId>

<artifactId>spark-sql_${scala.version}</artifactId>

<version>${spark.version}</version>

<scope>provided</scope>

</dependency>

<!-- Scala语言依赖 -->

<dependency>

<groupId>org.scala-lang</groupId>

<artifactId>scala-library</artifactId>

<version>${scala.version}</version>

</dependency>

</dependencies>

<!-- 插件配置 -->

<build>

<plugins>

<!-- Scala编译插件 -->

<plugin>

<groupId>net.alchim31.maven</groupId>

<artifactId>scala-maven-plugin</artifactId>

<version>4.6.4</version>

<executions>

<execution>

<goals>

<goal>compile</goal>

<goal>testCompile</goal>

</goals>

</execution>

</executions>

</plugin>

<!-- Maven打包插件(可选,用于生成可执行JAR) -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-shade-plugin</artifactId>

<version>3.4.1</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>shade</goal>

</goals>

<configuration>

<filters>

<filter>

<artifact>*:*</artifact>

<excludes>

<exclude>META-INF/*.SF</exclude>

<exclude>META-INF/*.DSA</exclude>

<exclude>META-INF/*.RSA</exclude>

</excludes>

</filter>

</filters>

<transformers>

<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">

<resource>reference.conf</resource>

</transformer>

<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">

<mainClass>你的主类路径</mainClass> <!-- 如com.example.SparkApp -->

</transformer>

</transformers>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>

</project>

四、创建Scala/Java源文件

  1. 标记源代码目录
  • 在 src/main 下新建 scala 或 java 目录,右键选择 Mark Directory as > Sources Root。
  1. 编写Spark应用(Scala示例)

scala

import org.apache.spark.sql.SparkSession

object SparkApp {

def main(args: ArrayString): Unit = {

// 创建SparkSession(本地模式)

val spark = SparkSession.builder()

.appName("IDEA Maven Spark Demo")

.master("local\*") // 本地多线程运行

.getOrCreate()

// 简单示例:读取文本文件

val df = spark.read.text("src/main/resources/test.txt")

df.printSchema()

df.show()

spark.stop()

}

}

五、运行与调试

  1. 本地运行
  • 直接点击IDEA中的运行按钮, master("local\*") 会使用本地资源执行。
  1. 调试
  • 设置断点,通过IDEA调试功能排查代码问题。
  1. 打包部署
  • 执行 mvn clean package 生成JAR包(若使用 shade-plugin ,需确保主类配置正确),上传到Spark集群运行:

bash

spark-submit --class com.example.SparkApp --master yarn ./target/spark-demo-1.0-SNAPSHOT.jar

注意事项

  1. 依赖范围(Scope)
  • provided 表示依赖仅在开发时使用,部署到集群时需确保集群已安装对应版本的Spark。
  1. Scala版本兼容
  • Spark版本与Scala版本需匹配(如Spark 3.5.x对应Scala 2.12/2.13)。
  1. 日志配置
  • 可在 src/main/resources 添加 log4j.properties 自定义日志级别。
  1. 集群部署
  • 若集群使用HDFS,需将输入/输出路径改为HDFS路径(如 hdfs://nameservice1/input.txt )。
相关推荐
极光代码工作室3 天前
基于数据仓库的电商数据分析平台
大数据·hadoop·python·spark·数据可视化
JLWcai202510093 天前
铸造领域树脂砂轮|金利威多场景解决方案,20 + 配方覆盖全需求
mongodb·zookeeper·eureka·spark·rabbitmq·memcached·storm
ACP广源盛139246256733 天前
GSV9001S@ACP#1080P 级视频处理芯片,物理 AI 普及终端的高性价比选择
大数据·人工智能·分布式·嵌入式硬件·spark
木心术13 天前
AMD Ryzen AI Halo与NVIDIA RTX Spark/DGX Spark两款AI个人主机的差异和优劣势
大数据·人工智能·spark
ACP广源盛139246256734 天前
GSV5600@ACP#多接口协议转换芯片,物理 AI 便携终端的互联核心
大数据·人工智能·分布式·嵌入式硬件·spark
KaMeidebaby4 天前
卡梅德生物技术快报 | 噬菌体展示 12 肽文库在蛋白表位定位中的应用与实验数据
大数据·人工智能·架构·spark·新浪微博
ACP广源盛139246256735 天前
GSV2221@ACP#DP 1.4 MST 多屏转换芯片,物理 AI 多模态交互的视觉中枢
大数据·人工智能·嵌入式硬件·gpt·spark
想ai抽5 天前
Spark Executor 因节点内存超限被杀的分析与应对
大数据·性能优化·spark
simidagogogo5 天前
生产环境推荐系统最隐蔽的坑:Training-Serving Skew 详解与实战
算法·spark·推荐算法
ACP广源盛139246256735 天前
GSV6155@ACP#DP 1.4a 重定时器芯片,物理 AI 信号长距传输的稳定保障
大数据·人工智能·分布式·嵌入式硬件·spark