You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建适配AWS SageMaker SparkJarProcessing的spark-test-app.jar

报错根因

SparkJarProcessor底层通过spark-submit提交任务,仅支持符合Spark应用规范的jar包,普通无Spark上下文的Java主类无法被Spark启动器识别,因此抛出Could not execute HW class错误。官方示例中的spark-test-app.jar就是标准的Spark应用,核心是必须初始化Spark入口对象,不能写纯Java SE的main方法。

可直接运行的样例代码

Scala版本(和官方示例实现逻辑一致)

构建配置(sbt)

文件路径:build.sbt

name := "spark-test-app"
version := "1.0"
scalaVersion := "2.12.14"
// Spark依赖设置为provided,运行时由SageMaker环境提供
libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.1.3" % "provided"

业务代码

文件路径:src/main/scala/com/test/HW.scala

package com.test

import org.apache.spark.sql.SparkSession

object HW {
  def main(args: Array[String]): Unit = {
    // 初始化Spark入口,是Spark应用必须的逻辑
    val spark = SparkSession.builder()
      .appName("sm-spark-hello")
      .getOrCreate()

    println("Hello World from SageMaker Spark Jar Processor!")
    // 打印传入的自定义参数
    args.foreach(arg => println(s"接收到参数: $arg"))

    spark.stop()
  }
}

执行sbt package即可生成可提交的jar包。

Java版本

构建配置(Maven)

核心配置段写在pom.xml中:

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.12</artifactId>
        <version>3.1.3</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.test.HW</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

业务代码

文件路径:src/main/java/com/test/HW.java

package com.test;

import org.apache.spark.sql.SparkSession;

public class HW {
    public static void main(String[] args) {
        SparkSession spark = SparkSession.builder()
                .appName("sm-spark-java-hello")
                .getOrCreate();

        System.out.println("Hello World from SageMaker Spark Java Job!");
        for (String arg : args) {
            System.out.println("接收到参数: " + arg);
        }

        spark.stop();
    }
}

执行mvn package即可生成可提交的jar包。

打包提交注意事项
  • 所有Spark相关依赖必须设置为provided作用域,不要把Spark依赖打进最终jar包,否则会出现类冲突报错。
  • 选择和SageMaker Spark框架版本匹配的依赖版本:framework_version="3.1"对应Spark 3.1.x、Scala 2.12,不要用Scala 2.11/2.13版本编译,否则会出现版本不兼容问题。
  • 主类必须实现Spark上下文初始化逻辑,不能是无Spark依赖的纯Java SE程序。

内容的提问来源于stack exchange,提问作者wavemonger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:45:31