教程:在无服务器计算上运行 Scala 代码

重要

无服务器计算上的用于 Scala 的 Databricks Connect 处于 Beta 阶段

本教程概述了如何使用无服务器计算开始使用用于 Scala 的 Databricks Connect。 它详细讲解了如何构建启用了 Unity Catalog 的计算(在标准访问模式下的经典计算或无服务器计算)兼容的 Scala JAR 文件。

小窍门

若要创建完全配置为在无服务器计算中部署和运行 JAR 的 Scala 项目,可以使用 Databricks 资产捆绑包。 请参阅 使用 Databricks 资产捆绑包生成 Scala JAR

要求

本地开发环境必须满足用于 Scala 的 Databricks Connect 的要求。 请参阅 Databricks Connect 使用情况要求,其中包括:

  • Java 开发工具包 (JDK)

  • sbt

  • 为无服务器计算配置的 Databricks CLI:

    databricks auth login --configure-serverless --host <workspace-url>
    

步骤 1:创建 Scala 项目

首先创建 Scala 项目。 出现提示时,输入项目名称,例如 my-spark-app

sbt new scala/scala-seed.g8

步骤 2:更新 Scala 和 JDK 版本

在生成 JAR 之前,请确保用于编译代码的 Java 开发工具包(JDK)和 Scala 的版本受无服务器计算支持。 有关此要求的详细信息,请参阅 设置 JDK 和 Scala 版本

有关兼容版本,请参阅 版本支持矩阵

以下配置适用于 Scala 2.13 和 JDK 17,它与 Databricks Runtime 版本 17 和无服务器环境版本 4 的专用或标准访问计算兼容。

scalaVersion := "2.13.16"

javacOptions ++= Seq("-source", "17", "-target", "17")
scalacOptions ++= Seq("-release", "17")

步骤 3:将 Databricks Connect 添加为依赖项

将 Databricks Connect 添加为依赖项以生成 Scala JAR。 有关详细信息,请参阅 Spark 依赖项

在 Scala 项目的 build.sbt 生成文件中,添加对 Databricks Connect 的以下引用。

scalaVersion := "2.13.16"
libraryDependencies += "com.databricks" %% "databricks-connect" % "17.0.+"

// To run with new JVM options, a fork is required, otherwise it uses the same options as the sbt process.
fork := true
javaOptions += "--add-opens=java.base/java.nio=ALL-UNNAMED"

步骤 4:添加其他依赖项

Databricks 建议将应用程序和所有依赖库打包到单个 JAR 文件中,也称为 überfat JAR。 或者,可以将依赖库安装为计算作用域库,或在无服务器环境中安装。 有关详细信息,请参阅 应用程序依赖项

重要

删除对 Spark 的任何依赖项。 Spark API 由 Databricks Connect 提供。 有关详细信息,请参阅 Spark 依赖项

步骤 5:添加 Spark 代码

src/main/scala/example/DatabricksExample.scala中创建主类。 有关在 Scala 代码中使用 Spark 会话的详细信息,请参阅 使用 Databricks Spark 会话

package com.examples

import com.databricks.connect.DatabricksSession
import org.apache.spark.sql.{SparkSession}

object SparkJar {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = DatabricksSession.builder()
      .validateSession(false)
      .addCompiledArtifacts(SparkJar.getClass.getProtectionDomain.getCodeSource.getLocation.toURI)
      .getOrCreate()

    println(spark.version)
    println(spark.range(10).limit(3).collect().mkString(" "))
  }
}

步骤 6:运行并生成代码

接下来,运行代码:

sbt run

现在使用以下行创建 project/assembly.sbt 文件,然后生成项目:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.3.1")
sbt assembly

步骤 7:部署 JAR

现在,使用 UI 中的 JAR 任务或使用 Databricks 资产捆绑包部署 JAR 文件:

注释

你创建的 JAR 也在标准计算上受到支持。 但是,对于标准计算,管理员必须将 JAR 库的 Maven 坐标和路径添加到允许列表。 请参阅使用标准访问模式(原共享访问模式)的计算上的允许列表库和 init 脚本

Databricks 建议将整个卷而不是单个 JAR 添加到允许列表。