Snowpark Migration Accelerator: 部署输出代码

要运行 Snowpark Migration Accelerator (SMA) 生成的输出代码,请根据您的源平台遵循这些针对特定环境的建议。

Spark Scala

在 Snowpark 中执行迁移的 Apache Spark 代码之前,请查看以下重要注意事项:

添加 Snowpark 和 Snowpark Extensions 库参考

迁移的项目必须包括对 Snowpark 库及其扩展的引用。

Snowpark Extensions

Snowpark Extensions 是一个库,将 Apache Spark 功能添加到标准 Snowpark 库中。这些功能目前在 Snowpark 中不可用。该库可帮助开发者更轻松地将其项目从 Apache Spark 迁移到 Snowpark。

按照以下步骤在迁移的代码中引用 Snowpark 和 Snowpark Extensions 库:

  1. 将 Snowpark 库引用添加到您的项目

  2. 将 Snowpark Extensions 库引用添加到您的项目

  3. 更新您的代码以使用这些库

第 1 步 – 将 Snowpark 和 Snowpark Extensions 库引用添加到项目配置文件

该工具会自动将这些依赖项添加到您的项目配置文件。添加依赖项后,您的构建工具将负责解析这些依赖项目。

根据您的项目配置文件的文件扩展名,该工具会自动通过以下方式添加相应的引用:

build.gradle

dependencies {
    implementation 'com.snowflake:snowpark:1.6.2'
    implementation 'net.mobilize.snowpark-extensions:snowparkextensions:0.0.9'
    ...
}

build.sbt

...
libraryDependencies += "com.snowflake" % "snowpark" % "1.6.2"
libraryDependencies += "net.mobilize.snowpark-extensions" % "snowparkextensions" % "0.0.9"
...

pom.xml

<dependencies>
    <dependency>
        <groupId>com.snowflake</groupId>
        <artifactId>snowpark</artifactId>
        <version>1.6.2</version>
    </dependency>
    <dependency>
        <groupId>net.mobilize.snowpark-extensions</groupId>
        <artifactId>snowparkextensions</artifactId>
        <version>0.0.9</version>
    </dependency>
    ...
</dependencies>

第 2 步 – 添加 Snowpark Extensions 库导入语句

该工具会自动将这两个导入语句添加到每个生成的 .scala 文件。

import com.snowflake.snowpark_extensions.Extensions._
import com.snowflake.snowpark_extensions.Extensions.functions._

代码示例

下面的代码使用 hexisin 函数,这两个函数是 Spark 的(但不是 Snowpark 的)原生函数。但是,代码仍能成功执行,因为这些函数通过 Snowpark Extensions 提供。

输入代码

package com.mobilize.spark

import org.apache.spark.sql._

object Main {

   def main(args: Array[String]) : Unit = {

      var languageArray = Array("Java");

      var languageHex = hex(col("language"));

      col("language").isin(languageArray:_*);
   }

}

输出代码

package com.mobilize.spark

import com.snowflake.snowpark._
import com.snowflake.snowpark_extensions.Extensions._
import com.snowflake.snowpark_extensions.Extensions.functions._

object Main {

   def main(args: Array[String]) : Unit = {

      var languageArray = Array("Java");

      // hex does not exist on Snowpark. It is a extension.
      var languageHex = hex(col("language"));

      // isin does not exist on Snowpark. It is a extension.
      col("language").isin(languageArray :_*)

   }

}

PySpark

在 Snowpark 中运行迁移的 PySpark 代码之前,请查看以下重要注意事项:

安装 Snowpark 和 Snowpark Extensions 库

迁移的项目必须包括对 Snowpark 库及其扩展的引用。

Snowpark Extensions

Snowpark Extensions 是一个库,将类似 PySpark 的功能添加到标准 Snowpark 库中。这些功能目前在 Snowpark 中不可用。该库可帮助开发者更轻松地将其项目从 PySpark 迁移到 Snowpark。

按照以下步骤在迁移的代码中引用 Snowpark 和 Snowpark Extensions 库:

  1. 将 Snowpark 库引用添加到迁移的代码

  2. 必要时包含 Snowpark Extensions 库引用

第 1 步 – 安装 Snowpark 库

pip install snowpark-extensions

第 2 步 – 安装 Snowpark Extensions 库

pip install snowflake-snowpark-python

第 3 步 – 添加 Snowpark Extensions 库导入语句

该工具会自动将 PySpark 导入语句添加到需要 PySpark 功能的每个文件中。

import snowpark_extensions

代码示例

The create_map function is not available in PySpark but is supported in Snowpark through its extensions. This means your code will work correctly in Snowpark without any modifications.

输入代码

import pyspark.sql.functions as df
df.select(create_map('name', 'age').alias("map")).collect()

输出代码

import snowpark_extensions
import snowflake.snowpark.functions as df
df.select(create_map('name', 'age').alias("map")).collect()