Snowpark Migration Accelerator: 出力コードの展開

Snowpark Migration Accelerator(SMA)によって生成された出力コードを実行するには、ソースプラットフォームに応じて、以下の環境固有の推奨事項に従います。

Spark Scala

移行したApache SparkコードをSnowparkで実行する前に、以下の重要な点を確認してください。

SnowparkおよびSnowpark拡張子ライブラリの参照の追加

移行したプロジェクトには、Snowparkライブラリとその拡張子の両方の参照が含まれている必要があります。

Snowpark Extensions

Snowpark Extensionsは、標準のSnowparkライブラリにApache Sparkの機能を追加するライブラリです。これらの機能は現在Snowparkでは使用できません。このライブラリは、開発者がプロジェクトをApache SparkからSnowparkへより簡単に移行するのに役立ちます。

以下のステップに従って、移行したコードでSnowparkとSnowpark Extensionsライブラリを参照します。

  1. Snowparkライブラリの参照をプロジェクトに追加する

  2. Snowpark Extensionsライブラリの参照をプロジェクトに追加する

  3. これらのライブラリを使用するようにコードを更新する

ステップ1 - プロジェクト構成ファイルにSnowparkとSnowpark拡張子ライブラリの参照を追加する

ツールは自動的にこれらの依存関係をプロジェクト構成ファイルに追加します。依存関係を追加した後は、ビルドツールがその解決を処理します。

プロジェクト構成ファイル拡張子に基づいて、ツールは自動的に適切な参照を以下のように追加します。

build.gradle

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

build.sbt

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

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>
Copy

ステップ2 - Snowpark拡張子ライブラリのインポートステートメントを追加する

このツールは、生成されたすべての.scalaファイルに、これら2つのimportステートメントを自動的に追加します。

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

コード例

以下のコードでは、 hexisin 関数を使用しています。これらはSparkのネイティブ関数ですが、Snowparkにはありません。しかし、これらの関数はSnowparkの拡張子により提供されるため、コードは正常に実行されます。

入力コード

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:_*);
   }

}
Copy

出力コード

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 :_*)

   }

}
Copy

PySpark

移行した PySpark コードをSnowparkで実行する前に、以下の重要な点を確認してください。

SnowparkとSnowparkの拡張子ライブラリをインストールする

移行したプロジェクトには、Snowparkライブラリとその拡張子の両方の参照が含まれている必要があります。

Snowpark Extensions

Snowpark Extensionsは、標準のSnowparkライブラリに PySpark のような機能を追加するライブラリです。これらの機能は現在Snowparkでは使用できません。このライブラリは、開発者がプロジェクトを PySpark からSnowparkに簡単に移行できるようにします。

以下のステップに従って、移行したコードでSnowparkとSnowpark Extensionsライブラリを参照します。

  1. 移行したコードにSnowparkライブラリの参照を追加する

  2. 必要に応じてSnowpark Extensionsライブラリの参照を含める

ステップ1 - Snowparkライブラリをインストールする

pip install snowpark-extensions
Copy

ステップ2 - Snowpark拡張ライブラリをインストールする

pip install snowflake-snowpark-python
Copy

ステップ3 - Snowpark拡張ライブラリのインポートステートメントを追加する

このツールは、 PySpark 関数を必要とするすべてのファイルに、 PySpark インポートステートメントを自動的に追加します。

import snowpark_extensions
Copy

コード例

create_map 関数は PySpark では利用できませんが、Snowparkでは拡張子によってサポートされています。これにより、コードはSnowparkで修正せずに正しく動作するようになります。

入力コード

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

出力コード

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