Snowpark Migration Accelerator: Spark - Scala用問題コード

SPRKSCL1126

メッセージ: org.apache.spark.sql.functions.covar_pop has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.covar_pop 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

入力

以下は、 org.apache.spark.sql.functions.covar_pop 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  (10.0, 100.0),
  (20.0, 150.0),
  (30.0, 200.0),
  (40.0, 250.0),
  (50.0, 300.0)
).toDF("column1", "column2")

val result1 = df.select(covar_pop("column1", "column2").as("covariance_pop"))
val result2 = df.select(covar_pop(col("column1"), col("column2")).as("covariance_pop"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1126 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  (10.0, 100.0),
  (20.0, 150.0),
  (30.0, 200.0),
  (40.0, 250.0),
  (50.0, 300.0)
).toDF("column1", "column2")

/*EWI: SPRKSCL1126 => org.apache.spark.sql.functions.covar_pop has a workaround, see documentation for more info*/
val result1 = df.select(covar_pop("column1", "column2").as("covariance_pop"))
/*EWI: SPRKSCL1126 => org.apache.spark.sql.functions.covar_pop has a workaround, see documentation for more info*/
val result2 = df.select(covar_pop(col("column1"), col("column2")).as("covariance_pop"))
Copy

推奨される修正

Snowparkには、引数として2つの列オブジェクトを受け取る同等の関数 covar_pop があります。そのため、2つの列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更は必要ありません。

2つの文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(
  (10.0, 100.0),
  (20.0, 150.0),
  (30.0, 200.0),
  (40.0, 250.0),
  (50.0, 300.0)
).toDF("column1", "column2")

val result1 = df.select(covar_pop(col("column1"), col("column2")).as("covariance_pop"))
val result2 = df.select(covar_pop(col("column1"), col("column2")).as("covariance_pop"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1112

メッセージ: _ spark element _ is not supported

カテゴリ: 変換エラー

説明

このエラーは、 SnowparkがサポートしていないSpark要素の使用を SMA が検出し、その要素に独自のエラーコードが関連付けられていない場合に表示されます。これは、サポートされていないSpark要素に対して SMA が使用する一般的なエラーコードです。

シナリオ

入力

以下は、SnowparkがサポートしていないSpark要素の例で、この EWI が生成されます。

val df = session.range(10)
val result = df.isLocal
Copy

出力

SMA は出力コードに EWI SPRKSCL1112 を追加して、この要素がSnowparkでサポートされていないことを知らせます。

val df = session.range(10)
/*EWI: SPRKSCL1112 => org.apache.spark.sql.Dataset.isLocal is not supported*/
val result = df.isLocal
Copy

推奨される修正

これは、サポートされていない関数の範囲に適用される一般的なエラーコードであるため、単一の特定の修正方法はありません。適切なアクションは、使用されている特定の要素によって異なります。

その要素がサポートされていないからといって、解決策や回避策が見つからないとは限らないことに注意してください。それは、 SMA 自身が解決策を見つけられないことを意味するだけです。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1143

メッセージ: An error occurred when loading the symbol table

カテゴリ: 変換エラー

説明

この問題は、 SMA 記号テーブルの記号をロードする際にエラーが発生すると表示されます。記号テーブルは、 SMA の基になるアーキテクチャの一部であり、より複雑な変換を可能にします。

その他の推奨事項

  • これはソースコード自体のエラーとは考えにくく、むしろ SMA がソースコードを処理する方法のエラーです。最良の解決方法は、 SMA 内 に問題を記載することでしょう。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1153

警告

Spark Conversion Coreバージョン4.3.2 以降、この問題コードは 廃止 されています

メッセージ: org.apache.spark.sql.functions.max has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.max 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.max 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(10, 12, 20, 15, 18).toDF("value")
val result1 = df.select(max("value"))
val result2 = df.select(max(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1153 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(10, 12, 20, 15, 18).toDF("value")
/*EWI: SPRKSCL1153 => org.apache.spark.sql.functions.max has a workaround, see documentation for more info*/
val result1 = df.select(max("value"))
/*EWI: SPRKSCL1153 => org.apache.spark.sql.functions.max has a workaround, see documentation for more info*/
val result2 = df.select(max(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 max があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(10, 12, 20, 15, 18).toDF("value")
val result1 = df.select(max(col("value")))
val result2 = df.select(max(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1102

この問題コードは、 Spark Conversion Core 2.3.22 以降 廃止 されています

メッセージ: Explode is not supported

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.explode 関数の使用を SMA が検出した場合に発生します。この関数はSnowparkではサポートされていません。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.explode 関数を使用して、データセットの配列フィールドの連結情報を取得する例です。

    val explodeData = Seq(
      Row("Cat", Array("Gato","Chat")),
      Row("Dog", Array("Perro","Chien")),
      Row("Bird", Array("Ave","Oiseau"))
    )

    val explodeSchema = StructType(
      List(
        StructField("Animal", StringType),
        StructField("Translation", ArrayType(StringType))
      )
    )

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

    dfExplode.select(explode(dfExplode("Translation").alias("exploded")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1102 を追加して、この関数がSnowparkでサポートされていないことを知らせます。

    val explodeData = Seq(
      Row("Cat", Array("Gato","Chat")),
      Row("Dog", Array("Perro","Chien")),
      Row("Bird", Array("Ave","Oiseau"))
    )

    val explodeSchema = StructType(
      List(
        StructField("Animal", StringType),
        StructField("Translation", ArrayType(StringType))
      )
    )

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

    /*EWI: SPRKSCL1102 => Explode is not supported */
    dfExplode.select(explode(dfExplode("Translation").alias("exploded")))
Copy

推奨される修正

explodeはSnowparkではサポートされていないため、 flatten という関数で代用できます。

次の修正では、dfExplodeデータフレームのフラット化を実行し、クエリ結果をSparkに再現します。

    val explodeData = Seq(
      Row("Cat", Array("Gato","Chat")),
      Row("Dog", Array("Perro","Chien")),
      Row("Bird", Array("Ave","Oiseau"))
    )

    val explodeSchema = StructType(
      List(
        StructField("Animal", StringType),
        StructField("Translation", ArrayType(StringType))
      )
    )

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

     var dfFlatten = dfExplode.flatten(col("Translation")).alias("exploded")
                              .select(col("exploded.value").alias("Translation"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1136

警告

この問題コードは、 Spark Conversion Core 4.3.2 以降 廃止 されています

メッセージ: org.apache.spark.sql.functions.min has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.min 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.min 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(1, 3, 10, 1, 3).toDF("value")
val result1 = df.select(min("value"))
val result2 = df.select(min(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1136 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(1, 3, 10, 1, 3).toDF("value")
/*EWI: SPRKSCL1136 => org.apache.spark.sql.functions.min has a workaround, see documentation for more info*/
val result1 = df.select(min("value"))
/*EWI: SPRKSCL1136 => org.apache.spark.sql.functions.min has a workaround, see documentation for more info*/
val result2 = df.select(min(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 min があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を取得するオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(1, 3, 10, 1, 3).toDF("value")
val result1 = df.select(min(col("value")))
val result2 = df.select(min(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1167

メッセージ: Project file not found on input folder

カテゴリ: 警告

説明

この問題は、入力フォルダーにプロジェクト構成ファイルがないことを SMA が検出した場合に発生します。SMA でサポートされているプロジェクト構成ファイルは以下のとおりです。

  • build.sbt

  • build.gradle

  • pom.xml

その他の推奨事項

  • 入力フォルダーに構成プロジェクトファイルを含めます。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1147

メッセージ: org.apache.spark.sql.functions.tanh has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.tanh 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.tanh 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(-1.0, 0.5, 1.0, 2.0).toDF("value")
val result1 = df.withColumn("tanh_value", tanh("value"))
val result2 = df.withColumn("tanh_value", tanh(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1147 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(-1.0, 0.5, 1.0, 2.0).toDF("value")
/*EWI: SPRKSCL1147 => org.apache.spark.sql.functions.tanh has a workaround, see documentation for more info*/
val result1 = df.withColumn("tanh_value", tanh("value"))
/*EWI: SPRKSCL1147 => org.apache.spark.sql.functions.tanh has a workaround, see documentation for more info*/
val result2 = df.withColumn("tanh_value", tanh(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 tanh があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(-1.0, 0.5, 1.0, 2.0).toDF("value")
val result1 = df.withColumn("tanh_value", tanh(col("value")))
val result2 = df.withColumn("tanh_value", tanh(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1116

警告

この問題コードは、 Spark Conversion Core Version 2.40.1 以降 廃止 されています

メッセージ: org.apache.spark.sql.functions.split has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.split 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.split 関数の例です。

val df = Seq("apple,banana,orange", "grape,lemon,lime", "cherry,blueberry,strawberry").toDF("values")
val result1 = df.withColumn("split_values", split(col("values"), ","))
val result2 = df.withColumn("split_values", split(col("values"), ",", 0))
Copy

出力

SMA は出力コードに EWI SPRKSCL1116 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq("apple,banana,orange", "grape,lemon,lime", "cherry,blueberry,strawberry").toDF("values")
/*EWI: SPRKSCL1116 => org.apache.spark.sql.functions.split has a workaround, see documentation for more info*/
val result1 = df.withColumn("split_values", split(col("values"), ","))
/*EWI: SPRKSCL1116 => org.apache.spark.sql.functions.split has a workaround, see documentation for more info*/
val result2 = df.withColumn("split_values", split(col("values"), ",", 0))
Copy

推奨される修正

引数を2つ受け取るSparkオーバーロードについては、回避策として com.snowflake.snowpark.functions.lit 関数を使用して、2つ目の引数を列オブジェクトに変換できます。

3つの引数を受け取るオーバーロードはSnowparkではまだサポートされておらず、回避策もありません。

val df = Seq("apple,banana,orange", "grape,lemon,lime", "cherry,blueberry,strawberry").toDF("values")
val result1 = df.withColumn("split_values", split(col("values"), lit(",")))
val result2 = df.withColumn("split_values", split(col("values"), ",", 0)) // This overload is not supported yet
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1122

メッセージ: org.apache.spark.sql.functions.corr has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.corr 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.corr 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  (10.0, 20.0),
  (20.0, 40.0),
  (30.0, 60.0)
).toDF("col1", "col2")

val result1 = df.select(corr("col1", "col2"))
val result2 = df.select(corr(col("col1"), col("col2")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1122 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  (10.0, 20.0),
  (20.0, 40.0),
  (30.0, 60.0)
).toDF("col1", "col2")

/*EWI: SPRKSCL1122 => org.apache.spark.sql.functions.corr has a workaround, see documentation for more info*/
val result1 = df.select(corr("col1", "col2"))
/*EWI: SPRKSCL1122 => org.apache.spark.sql.functions.corr has a workaround, see documentation for more info*/
val result2 = df.select(corr(col("col1"), col("col2")))
Copy

推奨される修正

Snowparkには、引数として2つの列オブジェクトを受け取る同等の関数 corr があります。そのため、列オブジェクトを引数として受け取るSparkオーバーロードはSnowparkで直接サポートされており、変更は必要ありません。

2つの文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(
  (10.0, 20.0),
  (20.0, 40.0),
  (30.0, 60.0)
).toDF("col1", "col2")

val result1 = df.select(corr(col("col1"), col("col2")))
val result2 = df.select(corr(col("col1"), col("col2")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1173

メッセージ: SQL embedded code cannot be processed.

カテゴリ: 警告。

説明

この問題は、 SMA が、処理できない SQL 埋め込みコードを検出した場合に発生します。その場合、 SQL 組み込みコードをSnowflakeに変換することはできません。

シナリオ

入力

以下は、処理できない SQL 埋め込みコードの例です。

spark.sql("CREATE VIEW IF EXISTS My View" + "AS Select * From my Table WHERE date < current_date()")
Copy

出力

SMA は出力コードに EWI SPRKSCL1173 を追加して、 SQL 埋め込みコードが処理できないことを知らせます。

/*EWI: SPRKSCL1173 => SQL embedded code cannot be processed.*/
spark.sql("CREATE VIEW IF EXISTS My View" + "AS Select * From my Table WHERE date < current_date()")
Copy

推奨される修正

SQL 埋め込みコードが、補間、変数、文字列連結のない文字列であることを確認してください。

その他の推奨事項

  • SQL 埋め込みについての詳しい情報は こちら をご参照ください。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1163

メッセージ: The element is not a literal and can't be evaluated.

カテゴリ: 変換エラー。

説明

この問題は、現在の処理要素がリテラルでない場合に発生し、 SMA で評価することができません。

シナリオ

入力

以下は、処理する要素がリテラルではなく、 SMA で評価できない場合の例です。

val format_type = "csv"
spark.read.format(format_type).load(path)
Copy

出力

SMA は出力コードに EWI SPRKSCL1163 を追加して、 format_type パラメーターがリテラルではなく、 SMA で評価できないことを知らせます。

/*EWI: SPRKSCL1163 => format_type is not a literal and can't be evaluated*/
val format_type = "csv"
spark.read.format(format_type).load(path)
Copy

推奨される修正

  • 予期せぬ動作を避けるために、変数の値が有効なものであることを確認してください。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1132

メッセージ: org.apache.spark.sql.functions.grouping_id has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.grouping_id 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.grouping_id 関数の例です。まず引数として複数の列名を指定し、次に列オブジェクトを指定します。

val df = Seq(
  ("Store1", "Product1", 100),
  ("Store1", "Product2", 150),
  ("Store2", "Product1", 200),
  ("Store2", "Product2", 250)
).toDF("store", "product", "amount")

val result1 = df.cube("store", "product").agg(sum("amount"), grouping_id("store", "product"))
val result2 = df.cube("store", "product").agg(sum("amount"), grouping_id(col("store"), col("product")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1132 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("Store1", "Product1", 100),
  ("Store1", "Product2", 150),
  ("Store2", "Product1", 200),
  ("Store2", "Product2", 250)
).toDF("store", "product", "amount")

/*EWI: SPRKSCL1132 => org.apache.spark.sql.functions.grouping_id has a workaround, see documentation for more info*/
val result1 = df.cube("store", "product").agg(sum("amount"), grouping_id("store", "product"))
/*EWI: SPRKSCL1132 => org.apache.spark.sql.functions.grouping_id has a workaround, see documentation for more info*/
val result2 = df.cube("store", "product").agg(sum("amount"), grouping_id(col("store"), col("product")))
Copy

推奨される修正

Snowparkには、複数の列オブジェクトを引数として受け取る同等の関数 grouping_id があります。そのため、複数の列オブジェクトを引数として受け取るSparkオーバーロードはSnowparkで直接サポートされており、変更は必要ありません。

複数の文字列引数を受け取るオーバーロードでは、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換できます。

val df = Seq(
  ("Store1", "Product1", 100),
  ("Store1", "Product2", 150),
  ("Store2", "Product1", 200),
  ("Store2", "Product2", 250)
).toDF("store", "product", "amount")

val result1 = df.cube("store", "product").agg(sum("amount"), grouping_id(col("store"), col("product")))
val result2 = df.cube("store", "product").agg(sum("amount"), grouping_id(col("store"), col("product")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1106

警告

この問題コードは、 廃止 されました。

メッセージ: Writer option is not supported.

カテゴリ: 変換エラー。

説明

この問題は、ツールがライターステートメントでSnowparkがサポートしていないオプションの使用を検出した場合に発生します。

シナリオ

入力

以下は、ライターステートメントにオプションを追加するために使用される org.apache.spark.sql.DataFrameWriter.option の例です。

df.write.format("net.snowflake.spark.snowflake").option("dbtable", tablename)
Copy

出力

SMA は出力コードに EWI SPRKSCL1106 を追加して、オプションメソッドがSnowparkでサポートされていないことを知らせます。

df.write.saveAsTable(tablename)
/*EWI: SPRKSCL1106 => Writer option is not supported .option("dbtable", tablename)*/
Copy

推奨される修正

このシナリオに対する推奨される修正はありません

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1157

メッセージ: org.apache.spark.sql.functions.kurtosis has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.kurtosis 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.kurtosis 関数の例です。この例では、 kurtosis 関数を使用して、選択した列の尖度を計算しています。

val df = Seq("1", "2", "3").toDF("elements")
val result1 = kurtosis(col("elements"))
val result2 = kurtosis("elements")
Copy

出力

SMA は出力コードに EWI SPRKSCL1157 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq("1", "2", "3").toDF("elements")
/*EWI: SPRKSCL1157 => org.apache.spark.sql.functions.kurtosis has a workaround, see documentation for more info*/
val result1 = kurtosis(col("elements"))
/*EWI: SPRKSCL1157 => org.apache.spark.sql.functions.kurtosis has a workaround, see documentation for more info*/
val result2 = kurtosis("elements")
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 kurtosis があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq("1", "2", "3").toDF("elements")
val result1 = kurtosis(col("elements"))
val result2 = kurtosis(col("elements"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1146

メッセージ: org.apache.spark.sql.functions.tan has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.tan 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.tan 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(math.Pi / 4, math.Pi / 3, math.Pi / 6).toDF("angle")
val result1 = df.withColumn("tan_value", tan("angle"))
val result2 = df.withColumn("tan_value", tan(col("angle")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1146 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(math.Pi / 4, math.Pi / 3, math.Pi / 6).toDF("angle")
/*EWI: SPRKSCL1146 => org.apache.spark.sql.functions.tan has a workaround, see documentation for more info*/
val result1 = df.withColumn("tan_value", tan("angle"))
/*EWI: SPRKSCL1146 => org.apache.spark.sql.functions.tan has a workaround, see documentation for more info*/
val result2 = df.withColumn("tan_value", tan(col("angle")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 tan があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(math.Pi / 4, math.Pi / 3, math.Pi / 6).toDF("angle")
val result1 = df.withColumn("tan_value", tan(col("angle")))
val result2 = df.withColumn("tan_value", tan(col("angle")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1117

警告

この問題コードは、 Spark Conversion Core 2.40.1 以降 廃止 されています

メッセージ: org.apache.spark.sql.functions.translate has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.translate 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.translate 関数の例です。この例では、 translate 関数を使用して、各単語内の文字 「a」「e」「o」 を、それぞれ 「1」「2」「3」 に置き換えています。

val df = Seq("hello", "world", "scala").toDF("word")
val result = df.withColumn("translated_word", translate(col("word"), "aeo", "123"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1117 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq("hello", "world", "scala").toDF("word")
/*EWI: SPRKSCL1117 => org.apache.spark.sql.functions.translate has a workaround, see documentation for more info*/
val result = df.withColumn("translated_word", translate(col("word"), "aeo", "123"))
Copy

推奨される修正

回避策として、 com.snowflake.snowpark.functions.lit 関数を使用して、第2引数と第3引数を列オブジェクトに変換することができます。

val df = Seq("hello", "world", "scala").toDF("word")
val result = df.withColumn("translated_word", translate(col("word"), lit("aeo"), lit("123")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1123

メッセージ: org.apache.spark.sql.functions.cos has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.cos 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.cos 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(0.0, Math.PI / 4, Math.PI / 2, Math.PI).toDF("angle_radians")
val result1 = df.withColumn("cosine_value", cos("angle_radians"))
val result2 = df.withColumn("cosine_value", cos(col("angle_radians")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1123 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(0.0, Math.PI / 4, Math.PI / 2, Math.PI).toDF("angle_radians")
/*EWI: SPRKSCL1123 => org.apache.spark.sql.functions.cos has a workaround, see documentation for more info*/
val result1 = df.withColumn("cosine_value", cos("angle_radians"))
/*EWI: SPRKSCL1123 => org.apache.spark.sql.functions.cos has a workaround, see documentation for more info*/
val result2 = df.withColumn("cosine_value", cos(col("angle_radians")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 cos があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(0.0, Math.PI / 4, Math.PI / 2, Math.PI).toDF("angle_radians")
val result1 = df.withColumn("cosine_value", cos(col("angle_radians")))
val result2 = df.withColumn("cosine_value", cos(col("angle_radians")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1172

メッセージ: Snowpark does not support StructFiled with metadata parameter.

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.types.StructField.apply にパラメーターとして org.apache.spark.sql.types.Metadata が指定されていることを SMA が検出した場合に発生します。これはSnowparkがメタデータパラメーターをサポートしていないためです。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.types.StructField.apply 関数の例です。この例では、 apply 関数を使用して、 StructField のインスタンスを生成しています。

val result = StructField("f1", StringType(), True, metadata)
Copy

出力

SMA は出力コードに EWI SPRKSCL1172 を追加して、メタデータパラメーターがSnowflakeでサポートされていないことを知らせます。

/*EWI: SPRKSCL1172 => Snowpark does not support StructFiled with metadata parameter.*/
val result = StructField("f1", StringType(), True, metadata)
Copy

推奨される修正

Snowparkには、3つのパラメーターを受け取る同等の関数 com.snowflake.snowpark.types.StructField.apply があります。回避策として、メタデータの引数を削除してみてください。

val result = StructField("f1", StringType(), True, metadata)
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1162

注釈

この問題コードは、 廃止 されました。

メッセージ: An error occurred when extracting the dbc files.

カテゴリ: 警告。

説明

この問題は、dbcファイルを抽出できない場合に発生します。この警告は、重すぎる、アクセスできない、読み取り専用などのような原因が考えられます。

その他の推奨事項

  • 回避策として、ファイルが重すぎて処理できない場合は、ファイルのサイズを確認することができます。また、アクセスの問題を避けるために、ツールがアクセスできるかどうかを分析します。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1133

メッセージ: org.apache.spark.sql.functions.least has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.least 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.least 関数の例です。最初は引数として複数の列名に使用し、次に列オブジェクトに使用します。

val df = Seq((10, 20, 5), (15, 25, 30), (7, 14, 3)).toDF("value1", "value2", "value3")
val result1 = df.withColumn("least", least("value1", "value2", "value3"))
val result2 = df.withColumn("least", least(col("value1"), col("value2"), col("value3")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1133 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq((10, 20, 5), (15, 25, 30), (7, 14, 3)).toDF("value1", "value2", "value3")
/*EWI: SPRKSCL1133 => org.apache.spark.sql.functions.least has a workaround, see documentation for more info*/
val result1 = df.withColumn("least", least("value1", "value2", "value3"))
/*EWI: SPRKSCL1133 => org.apache.spark.sql.functions.least has a workaround, see documentation for more info*/
val result2 = df.withColumn("least", least(col("value1"), col("value2"), col("value3")))
Copy

推奨される修正

Snowparkには、複数の列オブジェクトを引数として受け取る同等の関数 least があります。そのため、複数の列オブジェクトを引数として受け取るSparkオーバーロードはSnowparkで直接サポートされており、変更は必要ありません。

複数の文字列引数を受け取るオーバーロードでは、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換できます。

val df = Seq((10, 20, 5), (15, 25, 30), (7, 14, 3)).toDF("value1", "value2", "value3")
val result1 = df.withColumn("least", least(col("value1"), col("value2"), col("value3")))
val result2 = df.withColumn("least", least(col("value1"), col("value2"), col("value3")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1107

警告

この問題コードは、 廃止 されました。

メッセージ: Writer save is not supported.

カテゴリ: 変換エラー。

説明

この問題は、ツールがライターステートメントで、Snowparkがサポートしていないライター保存メソッドの使用を検出した場合に発生します。

シナリオ

入力

以下は、 DataFrame コンテンツの保存に使用される org.apache.spark.sql.DataFrameWriter.save の例です。

df.write.format("net.snowflake.spark.snowflake").save()
Copy

出力

SMA は出力コードに EWI SPRKSCL1107 を追加して、Snowparkがその保存方法をサポートしていないことを知らせます。

df.write.saveAsTable(tablename)
/*EWI: SPRKSCL1107 => Writer method is not supported .save()*/
Copy

推奨される修正

このシナリオに対する推奨される修正はありません

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1156

メッセージ: org.apache.spark.sql.functions.degrees has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.degrees 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.degrees 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(math.Pi, math.Pi / 2, math.Pi / 4, math.Pi / 6).toDF("radians")
val result1 = df.withColumn("degrees", degrees("radians"))
val result2 = df.withColumn("degrees", degrees(col("radians")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1156 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(math.Pi, math.Pi / 2, math.Pi / 4, math.Pi / 6).toDF("radians")
/*EWI: SPRKSCL1156 => org.apache.spark.sql.functions.degrees has a workaround, see documentation for more info*/
val result1 = df.withColumn("degrees", degrees("radians"))
/*EWI: SPRKSCL1156 => org.apache.spark.sql.functions.degrees has a workaround, see documentation for more info*/
val result2 = df.withColumn("degrees", degrees(col("radians")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 degrees があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(math.Pi, math.Pi / 2, math.Pi / 4, math.Pi / 6).toDF("radians")
val result1 = df.withColumn("degrees", degrees(col("radians")))
val result2 = df.withColumn("degrees", degrees(col("radians")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1127

メッセージ: org.apache.spark.sql.functions.covar_samp has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.covar_samp 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.covar_samp 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  (10.0, 20.0),
  (15.0, 25.0),
  (20.0, 30.0),
  (25.0, 35.0),
  (30.0, 40.0)
).toDF("value1", "value2")

val result1 = df.select(covar_samp("value1", "value2").as("sample_covariance"))
val result2 = df.select(covar_samp(col("value1"), col("value2")).as("sample_covariance"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1127 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  (10.0, 20.0),
  (15.0, 25.0),
  (20.0, 30.0),
  (25.0, 35.0),
  (30.0, 40.0)
).toDF("value1", "value2")

/*EWI: SPRKSCL1127 => org.apache.spark.sql.functions.covar_samp has a workaround, see documentation for more info*/
val result1 = df.select(covar_samp("value1", "value2").as("sample_covariance"))
/*EWI: SPRKSCL1127 => org.apache.spark.sql.functions.covar_samp has a workaround, see documentation for more info*/
val result2 = df.select(covar_samp(col("value1"), col("value2")).as("sample_covariance"))
Copy

推奨される修正

Snowparkには、引数として2つの列オブジェクトを受け取る同等の関数 covar_samp があります。そのため、2つの列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更は必要ありません。

2つの文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(
  (10.0, 20.0),
  (15.0, 25.0),
  (20.0, 30.0),
  (25.0, 35.0),
  (30.0, 40.0)
).toDF("value1", "value2")

val result1 = df.select(covar_samp(col("value1"), col("value2")).as("sample_covariance"))
val result2 = df.select(covar_samp(col("value1"), col("value2")).as("sample_covariance"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1113

メッセージ: org.apache.spark.sql.functions.next_day has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.next_day 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.next_day 関数の例です。最初は文字列を第2引数に、次に列オブジェクトを第2引数に指定します。

val df = Seq("2024-11-06", "2024-11-13", "2024-11-20").toDF("date")
val result1 = df.withColumn("next_monday", next_day(col("date"), "Mon"))
val result2 = df.withColumn("next_monday", next_day(col("date"), lit("Mon")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1113 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq("2024-11-06", "2024-11-13", "2024-11-20").toDF("date")
/*EWI: SPRKSCL1113 => org.apache.spark.sql.functions.next_day has a workaround, see documentation for more info*/
val result1 = df.withColumn("next_monday", next_day(col("date"), "Mon"))
/*EWI: SPRKSCL1113 => org.apache.spark.sql.functions.next_day has a workaround, see documentation for more info*/
val result2 = df.withColumn("next_monday", next_day(col("date"), lit("Mon")))
Copy

推奨される修正

Snowparkには、引数として2つの列オブジェクトを受け取る同等の関数 next_day があります。そのため、2つの列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更は必要ありません。

列オブジェクトと文字列を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.lit 関数を使用して文字列を列オブジェクトに変換することができます。

val df = Seq("2024-11-06", "2024-11-13", "2024-11-20").toDF("date")
val result1 = df.withColumn("next_monday", next_day(col("date"), lit("Mon")))
val result2 = df.withColumn("next_monday", next_day(col("date"), lit("Mon")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1002

メッセージ: This code section has recovery from parsing errors _ statement _

カテゴリ: 解析エラー。

説明

この問題は、 SMA がファイルのコードを正しく読み取れない、または理解できないステートメントを検出した場合に発生します。 解析エラー と呼ばれますが、 SMA はこの解析エラーから回復し、ファイルのコードの分析を続行できます。この場合、 SMA はファイルのコードをエラーなく処理することができます。

シナリオ

入力

以下は、 SMA が回復できる無効なScalaコードの例です。

Class myClass {

    def function1() & = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

出力

SMA は出力コードに EWI SPRKSCL1002 を追加して、ファイルのコードに解析エラーがあることを知らせますが、 SMA は、そのエラーを回復して、ファイルのコードの分析を続行することができます。

class myClass {

    def function1();//EWI: SPRKSCL1002 => Unexpected end of declaration. Failed token: '&' @(3,21).
    & = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

推奨される修正

メッセージはステートメントのエラーをピンポイントで示しているため、無効な構文を特定してそれを削除するか、そのステートメントをコメントアウトして解析エラーを回避することができます。

Class myClass {

    def function1() = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy
Class myClass {

    // def function1() & = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

その他の推奨事項

  • ファイルのコードが有効なScalaコードであることを確認します。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1142

メッセージ: _ spark element _ is not defined

カテゴリ: 変換エラー

説明

この問題は、指定された要素に対して適切なマッピングステータスを SMA が決定できなかった場合に発生します。これは、この要素がSnowparkでサポートされているかどうかを SMA がまだ知らないことを意味します。これは、定義されていない要素に対して SMA が使用する一般的なエラーコードです。

シナリオ

入力

以下は、 SMA が適切なマッピングステータスを判断できず、この EWI を生成した関数の例です。この場合は、 notDefinedFunction() が有効なSpark関数であり、コードが実行されると仮定してください。

val df = session.range(10)
val result = df.notDefinedFunction()
Copy

出力

SMA は出力コードに EWI SPRKSCL1142 を追加して、この要素が定義されていないことを知らせます。

val df = session.range(10)
/*EWI: SPRKSCL1142 => org.apache.spark.sql.DataFrame.notDefinedFunction is not defined*/
val result = df.notDefinedFunction()
Copy

推奨される修正

問題の識別を試みるために、以下を検証します。

  • 有効なSpark要素かどうかを確認します。

  • 要素の構文とスペルが正しいかどうかを確認します。

  • SMA でサポートされているSparkのバージョンを使用しているかどうかを確認します。

これが有効なSpark要素である場合は、 SMA の 問題を報告する オプションを使用して、その特定の要素で変換エラーが発生したことを報告し、役に立つと思われる追加情報を含めます。

SMA で定義されていない要素があるからといって、Snowparkでサポートされないとは限らないことに注意してください。Snowparkドキュメント を参照して、同等の要素が存在するかどうかを検証する必要があります。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1152

メッセージ: org.apache.spark.sql.functions.variance has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.variance 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.variance 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(10, 20, 30, 40, 50).toDF("value")
val result1 = df.select(variance("value"))
val result2 = df.select(variance(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1152 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(10, 20, 30, 40, 50).toDF("value")
/*EWI: SPRKSCL1152 => org.apache.spark.sql.functions.variance has a workaround, see documentation for more info*/
val result1 = df.select(variance("value"))
/*EWI: SPRKSCL1152 => org.apache.spark.sql.functions.variance has a workaround, see documentation for more info*/
val result2 = df.select(variance(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 variance があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(10, 20, 30, 40, 50).toDF("value")
val result1 = df.select(variance(col("value")))
val result2 = df.select(variance(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1103

この問題コードは、 廃止 されました。

メッセージ: SparkBuilder method is not supported _ method name _

カテゴリ: 変換エラー

説明

この問題は、 SparkBuilder メソッドチェーンでSnowflakeがサポートしていないメソッドを SMA が検出した場合に表示されます。したがって、リーダーステートメントの移行に影響を与える可能性があります。

以下はサポートされていない SparkBuilder メソッドです。

  • master

  • appName

  • enableHiveSupport

  • withExtensions

シナリオ

入力

以下は、Snowflakeがサポートしていないメソッドが多数ある SparkBuilder メソッドチェーンの例です。

val spark = SparkSession.builder()
           .master("local")
           .appName("testApp")
           .config("spark.sql.broadcastTimeout", "3600")
           .enableHiveSupport()
           .getOrCreate()
Copy

出力

SMA は出力コードに EWI SPRKSCL1103 を追加して、master、appName、 enableHiveSupport メソッドがSnowparkでサポートされていないことを知らせます。この場合は、Sparkセッションステートメントの移行に影響する可能性があります。

val spark = Session.builder.configFile("connection.properties")
/*EWI: SPRKSCL1103 => SparkBuilder Method is not supported .master("local")*/
/*EWI: SPRKSCL1103 => SparkBuilder Method is not supported .appName("testApp")*/
/*EWI: SPRKSCL1103 => SparkBuilder method is not supported .enableHiveSupport()*/
.create
Copy

推奨される修正

セッションを作成するには、適切なSnowflake Snowparkの構成を追加する必要があります。

この例ではconfigs変数が使われています。

    val configs = Map (
      "URL" -> "https://<myAccount>.snowflakecomputing.com:<port>",
      "USER" -> <myUserName>,
      "PASSWORD" -> <myPassword>,
      "ROLE" -> <myRole>,
      "WAREHOUSE" -> <myWarehouse>,
      "DB" -> <myDatabase>,
      "SCHEMA" -> <mySchema>
    )
    val session = Session.builder.configs(configs).create
Copy

また、接続情報を含むconfigFile (profile.properties)の使用を推奨します。

## profile.properties file (a text file)
URL = https://<account_identifier>.snowflakecomputing.com
USER = <username>
PRIVATEKEY = <unencrypted_private_key_from_the_private_key_file>
ROLE = <role_name>
WAREHOUSE = <warehouse_name>
DB = <database_name>
SCHEMA = <schema_name>
Copy

そして、 Session.builder.configFile を使用してセッションを作成することができます。

val session = Session.builder.configFile("/path/to/properties/file").create
Copy

その他の推奨事項

SPRKSCL1137

メッセージ: org.apache.spark.sql.functions.sin has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.sin 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.sin 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(Math.PI / 2, Math.PI, Math.PI / 6).toDF("angle")
val result1 = df.withColumn("sin_value", sin("angle"))
val result2 = df.withColumn("sin_value", sin(col("angle")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1137 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(Math.PI / 2, Math.PI, Math.PI / 6).toDF("angle")
/*EWI: SPRKSCL1137 => org.apache.spark.sql.functions.sin has a workaround, see documentation for more info*/
val result1 = df.withColumn("sin_value", sin("angle"))
/*EWI: SPRKSCL1137 => org.apache.spark.sql.functions.sin has a workaround, see documentation for more info*/
val result2 = df.withColumn("sin_value", sin(col("angle")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 sin があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(Math.PI / 2, Math.PI, Math.PI / 6).toDF("angle")
val result1 = df.withColumn("sin_value", sin(col("angle")))
val result2 = df.withColumn("sin_value", sin(col("angle")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1166

注釈

この問題コードは、 廃止 されました。

メッセージ: org.apache.spark.sql.DataFrameReader.format is not supported.

カテゴリ: 警告。

説明

この問題は、 org.apache.spark.sql.DataFrameReader.format にSnowparkでサポートされていない引数がある場合に表示されます。

シナリオ

読み込む形式のタイプによって、いくつかのシナリオがあります。これは、 サポートされる 形式、または サポートされない 形式です。

シナリオ1

入力

このツールは、読み込む形式のタイプを分析します。

  • csv

  • json

  • orc

  • parquet

  • text

以下の例は、 csv の値を渡したときに、 format メソッドをツールがどのように変換するかを示しています。

spark.read.format("csv").load(path)
Copy

出力

このツールは、load関数にパラメーターが1つある場合に、 format メソッドを csv メソッド呼び出しに変換します。

spark.read.csv(path)
Copy

推奨される修正

この場合、ツールは EWI を表示しません。

シナリオ2

入力

以下の例は、 net.snowflake.spark.snowflake の値を渡したときに、 format メソッドをツールがどのように変換するかを示しています。

spark.read.format("net.snowflake.spark.snowflake").load(path)
Copy

出力

ツールは、 net.snowflake.spark.snowflake という値がサポートされていないことを示す EWI SPRKSCL1166 を表示します。

/*EWI: SPRKSCL1166 => The parameter net.snowflake.spark.snowflake is not supported for org.apache.spark.sql.DataFrameReader.format
  EWI: SPRKSCL1112 => org.apache.spark.sql.DataFrameReader.load(scala.String) is not supported*/
spark.read.format("net.snowflake.spark.snowflake").load(path)
Copy

推奨される修正

サポートされていない シナリオについては、読み込もうとしているファイルに依存するため、特定の修正はありません。

シナリオ3

入力

以下の例は、 csv を渡す際にツールが format メソッドを変換する方法を示していますが、代わりに変数を使用しています。

val myFormat = "csv"
spark.read.format(myFormat).load(path)
Copy

出力

ツールはランタイムで変数の値を決定できないため、値がサポートされていないことを示す EWI SPRKSCL1163 を表示します。

/*EWI: SPRKSCL1163 => myFormat is not a literal and can't be evaluated
  EWI: SPRKSCL1112 => org.apache.spark.sql.DataFrameReader.load(scala.String) is not supported*/
spark.read.format(myFormat).load(path)
Copy

推奨される修正

回避策として、変数の値をチェックし、 format 呼び出しに文字列として追加することができます。

その他の推奨事項

  • Snowparkロケーションは、 Snowflakeステージ を使用したクラウドロケーションのみを受け付けます。

  • Snowparkがサポートするメソッドのドキュメントは、以下の ドキュメント にあります

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1118

メッセージ: org.apache.spark.sql.functions.trunc has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.trunc 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.trunc 関数の例です。

val df = Seq(
  Date.valueOf("2024-10-28"),
  Date.valueOf("2023-05-15"),
  Date.valueOf("2022-11-20"),
).toDF("date")

val result = df.withColumn("truncated", trunc(col("date"), "month"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1118 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  Date.valueOf("2024-10-28"),
  Date.valueOf("2023-05-15"),
  Date.valueOf("2022-11-20"),
).toDF("date")

/*EWI: SPRKSCL1118 => org.apache.spark.sql.functions.trunc has a workaround, see documentation for more info*/
val result = df.withColumn("truncated", trunc(col("date"), "month"))
Copy

推奨される修正

回避策として、 com.snowflake.snowpark.functions.lit 関数を使用して、第2引数を列オブジェクトに変換することができます。

val df = Seq(
  Date.valueOf("2024-10-28"),
  Date.valueOf("2023-05-15"),
  Date.valueOf("2022-11-20"),
).toDF("date")

val result = df.withColumn("truncated", trunc(col("date"), lit("month")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1149

メッセージ: org.apache.spark.sql.functions.toRadians has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.toRadians 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.toRadians 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(0, 45, 90, 180, 270).toDF("degrees")
val result1 = df.withColumn("radians", toRadians("degrees"))
val result2 = df.withColumn("radians", toRadians(col("degrees")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1149 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(0, 45, 90, 180, 270).toDF("degrees")
/*EWI: SPRKSCL1149 => org.apache.spark.sql.functions.toRadians has a workaround, see documentation for more info*/
val result1 = df.withColumn("radians", toRadians("degrees"))
/*EWI: SPRKSCL1149 => org.apache.spark.sql.functions.toRadians has a workaround, see documentation for more info*/
val result2 = df.withColumn("radians", toRadians(col("degrees")))
Copy

推奨される修正

回避策として、 radians 関数を使用することができます。文字列引数を受け取るSparkオーバーロードでは、さらに com.snowflake.snowpark.functions.col 関数を使用して文字列を列オブジェクトに変換する必要があります。

val df = Seq(0, 45, 90, 180, 270).toDF("degrees")
val result1 = df.withColumn("radians", radians(col("degrees")))
val result2 = df.withColumn("radians", radians(col("degrees")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1159

メッセージ: org.apache.spark.sql.functions.stddev_samp has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.stddev_samp 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.stddev_samp 関数の例です。この例では、 stddev_samp 関数を使用して、選択した列のサンプル標準偏差を計算しています。

val df = Seq("1.7", "2.1", "3.0", "4.4", "5.2").toDF("elements")
val result1 = stddev_samp(col("elements"))
val result2 = stddev_samp("elements")
Copy

出力

SMA は出力コードに EWI SPRKSCL1159 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq("1.7", "2.1", "3.0", "4.4", "5.2").toDF("elements")
/*EWI: SPRKSCL1159 => org.apache.spark.sql.functions.stddev_samp has a workaround, see documentation for more info*/
val result1 = stddev_samp(col("elements"))
/*EWI: SPRKSCL1159 => org.apache.spark.sql.functions.stddev_samp has a workaround, see documentation for more info*/
val result2 = stddev_samp("elements")
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る stddev_samp 関数があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq("1.7", "2.1", "3.0", "4.4", "5.2").toDF("elements")
val result1 = stddev_samp(col("elements"))
val result2 = stddev_samp(col("elements"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1108

注釈

この問題コードは、 廃止されました。

メッセージ: org.apache.spark.sql.DataFrameReader.format is not supported.

カテゴリ: 警告。

説明

この問題は、 org.apache.spark.sql.DataFrameReader.format にSnowparkでサポートされていない引数がある場合に表示されます。

シナリオ

読み込む形式のタイプによって、いくつかのシナリオがあります。これは、 サポートされる 形式、または サポートされない 形式です。

シナリオ1

入力

このツールは、読み込む形式のタイプを分析します。

  • csv

  • json

  • orc

  • parquet

  • text

以下の例は、 csv の値を渡したときに、 format メソッドをツールがどのように変換するかを示しています。

spark.read.format("csv").load(path)
Copy

出力

このツールは、load関数にパラメーターが1つある場合に、 format メソッドを csv メソッド呼び出しに変換します。

spark.read.csv(path)
Copy

推奨される修正

この場合、ツールは EWI を表示しません。

シナリオ2

入力

以下の例は、 net.snowflake.spark.snowflake の値を渡したときに、 format メソッドをツールがどのように変換するかを示しています。

spark.read.format("net.snowflake.spark.snowflake").load(path)
Copy

出力

ツールは、 net.snowflake.spark.snowflake という値がサポートされていないことを示す EWI SPRKSCL1108 を表示します。

/*EWI: SPRKSCL1108 => The parameter net.snowflake.spark.snowflake is not supported for org.apache.spark.sql.DataFrameReader.format
  EWI: SPRKSCL1112 => org.apache.spark.sql.DataFrameReader.load(scala.String) is not supported*/
spark.read.format("net.snowflake.spark.snowflake").load(path)
Copy

推奨される修正

サポートされていない シナリオについては、読み込もうとしているファイルに依存するため、特定の修正はありません。

シナリオ3

入力

以下の例は、 csv を渡す際にツールが format メソッドを変換する方法を示していますが、代わりに変数を使用しています。

val myFormat = "csv"
spark.read.format(myFormat).load(path)
Copy

出力

ツールはランタイムで変数の値を決定できないため、値がサポートされていないことを示す EWI SPRKSCL1163 を表示します。

/*EWI: SPRKSCL1108 => myFormat is not a literal and can't be evaluated
  EWI: SPRKSCL1112 => org.apache.spark.sql.DataFrameReader.load(scala.String) is not supported*/
spark.read.format(myFormat).load(path)
Copy

推奨される修正

回避策として、変数の値をチェックし、 format 呼び出しに文字列として追加することができます。

その他の推奨事項

  • Snowparkロケーションは、 Snowflakeステージ を使用したクラウドロケーションのみを受け付けます。

  • Snowparkがサポートするメソッドのドキュメントは、以下の ドキュメント にあります

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1128

メッセージ: org.apache.spark.sql.functions.exp has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.exp 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.exp 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(1.0, 2.0, 3.0).toDF("value")
val result1 = df.withColumn("exp_value", exp("value"))
val result2 = df.withColumn("exp_value", exp(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1128 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(1.0, 2.0, 3.0).toDF("value")
/*EWI: SPRKSCL1128 => org.apache.spark.sql.functions.exp has a workaround, see documentation for more info*/
val result1 = df.withColumn("exp_value", exp("value"))
/*EWI: SPRKSCL1128 => org.apache.spark.sql.functions.exp has a workaround, see documentation for more info*/
val result2 = df.withColumn("exp_value", exp(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 exp があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(1.0, 2.0, 3.0).toDF("value")
val result1 = df.withColumn("exp_value", exp(col("value")))
val result2 = df.withColumn("exp_value", exp(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1169

メッセージ: _ Spark element _ is missing on the method chaining.

カテゴリ: 警告。

説明

この問題は、メソッドチェーンでSpark要素の呼び出しが欠落していることを SMA が検出した場合に発生します。SMA ステートメントを分析するには、Spark要素を知る必要があります。

シナリオ

入力

以下は、メソッドチェーンでロード関数呼び出しが欠落している例です。

val reader = spark.read.format("json")
val df = reader.load(path)
Copy

出力

SMA は出力コードに EWI SPRKSCL1169 を追加して、メソッドのチェーンにはロード関数呼び出しがなく、 SMA はステートメントを分析できないことを知らせます。

/*EWI: SPRKSCL1169 => Function 'org.apache.spark.sql.DataFrameReader.load' is missing on the method chaining*/
val reader = spark.read.format("json")
val df = reader.load(path)
Copy

推奨される修正

メソッドチェーンのすべての関数呼び出しが同じステートメント内にあることを確認してください。

val reader = spark.read.format("json").load(path)
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1138

メッセージ: org.apache.spark.sql.functions.sinh has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.sinh 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.sinh 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(0.0, 1.0, 2.0, 3.0).toDF("value")
val result1 = df.withColumn("sinh_value", sinh("value"))
val result2 = df.withColumn("sinh_value", sinh(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1138 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(0.0, 1.0, 2.0, 3.0).toDF("value")
/*EWI: SPRKSCL1138 => org.apache.spark.sql.functions.sinh has a workaround, see documentation for more info*/
val result1 = df.withColumn("sinh_value", sinh("value"))
/*EWI: SPRKSCL1138 => org.apache.spark.sql.functions.sinh has a workaround, see documentation for more info*/
val result2 = df.withColumn("sinh_value", sinh(col("value")))
Copy

推奨される修正

Snowpark には、列オブジェクトを引数として受け取る同等の関数 sinh があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(0.0, 1.0, 2.0, 3.0).toDF("value")
val result1 = df.withColumn("sinh_value", sinh(col("value")))
val result2 = df.withColumn("sinh_value", sinh(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1129

メッセージ: org.apache.spark.sql.functions.floor has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.floor 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.floor 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用し、最後に2つの列オブジェクトに使用します。

val df = Seq(4.75, 6.22, 9.99).toDF("value")
val result1 = df.withColumn("floor_value", floor("value"))
val result2 = df.withColumn("floor_value", floor(col("value")))
val result3 = df.withColumn("floor_value", floor(col("value"), lit(1)))
Copy

出力

SMA は出力コードに EWI SPRKSCL1129 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(4.75, 6.22, 9.99).toDF("value")
/*EWI: SPRKSCL1129 => org.apache.spark.sql.functions.floor has a workaround, see documentation for more info*/
val result1 = df.withColumn("floor_value", floor("value"))
/*EWI: SPRKSCL1129 => org.apache.spark.sql.functions.floor has a workaround, see documentation for more info*/
val result2 = df.withColumn("floor_value", floor(col("value")))
/*EWI: SPRKSCL1129 => org.apache.spark.sql.functions.floor has a workaround, see documentation for more info*/
val result3 = df.withColumn("floor_value", floor(col("value"), lit(1)))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 floor があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

列オブジェクトとスケールを受け取るオーバーロードでは、 callBuiltin 関数を使用して、Snowflake組み込み FLOOR 関数を呼び出すことができます。使用するには、第1引数に文字列 「floor」 を、第2引数に列を、第3引数にスケールを渡します。

val df = Seq(4.75, 6.22, 9.99).toDF("value")
val result1 = df.withColumn("floor_value", floor(col("value")))
val result2 = df.withColumn("floor_value", floor(col("value")))
val result3 = df.withColumn("floor_value", callBuiltin("floor", col("value"), lit(1)))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1168

メッセージ: _ Spark element _ with argument(s) value(s) _ given arguments _ is not supported.

カテゴリ: 警告。

説明

この問題は、指定されたパラメーターを持つSpark要素がサポートされていないことを SMA が検出した場合に発生します。

シナリオ

入力

以下は、パラメーターがサポートされていないSpark要素の例です。

spark.read.format("text").load(path)
Copy

出力

SMA は出力コードに EWI SPRKSCL1168 を追加して、指定されたパラメーターを持つSpark要素がサポートされていないことを知らせます。

/*EWI: SPRKSCL1168 => org.apache.spark.sql.DataFrameReader.format(scala.String) with argument(s) value(s) (spark.format) is not supported*/
spark.read.format("text").load(path)
Copy

推奨される修正

このシナリオについては、特に修正はありません。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1139

メッセージ: org.apache.spark.sql.functions.sqrt has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.sqrt 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.sqrt 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(4.0, 16.0, 25.0, 36.0).toDF("value")
val result1 = df.withColumn("sqrt_value", sqrt("value"))
val result2 = df.withColumn("sqrt_value", sqrt(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1139 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(4.0, 16.0, 25.0, 36.0).toDF("value")
/*EWI: SPRKSCL1139 => org.apache.spark.sql.functions.sqrt has a workaround, see documentation for more info*/
val result1 = df.withColumn("sqrt_value", sqrt("value"))
/*EWI: SPRKSCL1139 => org.apache.spark.sql.functions.sqrt has a workaround, see documentation for more info*/
val result2 = df.withColumn("sqrt_value", sqrt(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 sqrt があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(4.0, 16.0, 25.0, 36.0).toDF("value")
val result1 = df.withColumn("sqrt_value", sqrt(col("value")))
val result2 = df.withColumn("sqrt_value", sqrt(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1119

メッセージ: org.apache.spark.sql.Column.endsWith has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.Column.endsWith 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.Column.endsWith 関数の例です。最初にリテラル文字列引数に使用し、次に列オブジェクト引数に使用します。

val df1 = Seq(
  ("Alice", "alice@example.com"),
  ("Bob", "bob@example.org"),
  ("David", "david@example.com")
).toDF("name", "email")
val result1 = df1.filter(col("email").endsWith(".com"))

val df2 = Seq(
  ("Alice", "alice@example.com", ".com"),
  ("Bob", "bob@example.org", ".org"),
  ("David", "david@example.org", ".com")
).toDF("name", "email", "suffix")
val result2 = df2.filter(col("email").endsWith(col("suffix")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1119 を追加して、この関数がSnowparkで直接にはサポートされていないことを知らせますが、回避策があります。

val df1 = Seq(
  ("Alice", "alice@example.com"),
  ("Bob", "bob@example.org"),
  ("David", "david@example.com")
).toDF("name", "email")
/*EWI: SPRKSCL1119 => org.apache.spark.sql.Column.endsWith has a workaround, see documentation for more info*/
val result1 = df1.filter(col("email").endsWith(".com"))

val df2 = Seq(
  ("Alice", "alice@example.com", ".com"),
  ("Bob", "bob@example.org", ".org"),
  ("David", "david@example.org", ".com")
).toDF("name", "email", "suffix")
/*EWI: SPRKSCL1119 => org.apache.spark.sql.Column.endsWith has a workaround, see documentation for more info*/
val result2 = df2.filter(col("email").endsWith(col("suffix")))
Copy

推奨される修正

回避策として、 com.snowflake.snowpark.functions.endswith 関数を使用することができます。ここで、最初の引数は値を確認する列、2番目の引数は列の値を確認するサフィックスです。Sparkの endswith 関数の引数がリテラル文字列の場合は、 com.snowflake.snowpark.functions.lit 関数を使用して列オブジェクトに変換する必要があることに注意してください。

val df1 = Seq(
  ("Alice", "alice@example.com"),
  ("Bob", "bob@example.org"),
  ("David", "david@example.com")
).toDF("name", "email")
val result1 = df1.filter(endswith(col("email"), lit(".com")))

val df2 = Seq(
  ("Alice", "alice@example.com", ".com"),
  ("Bob", "bob@example.org", ".org"),
  ("David", "david@example.org", ".com")
).toDF("name", "email", "suffix")
val result2 = df2.filter(endswith(col("email"), col("suffix")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1148

メッセージ: org.apache.spark.sql.functions.toDegrees has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.toDegrees 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.toDegrees 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(Math.PI, Math.PI / 2, Math.PI / 4).toDF("angle_in_radians")
val result1 = df.withColumn("angle_in_degrees", toDegrees("angle_in_radians"))
val result2 = df.withColumn("angle_in_degrees", toDegrees(col("angle_in_radians")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1148 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(Math.PI, Math.PI / 2, Math.PI / 4).toDF("angle_in_radians")
/*EWI: SPRKSCL1148 => org.apache.spark.sql.functions.toDegrees has a workaround, see documentation for more info*/
val result1 = df.withColumn("angle_in_degrees", toDegrees("angle_in_radians"))
/*EWI: SPRKSCL1148 => org.apache.spark.sql.functions.toDegrees has a workaround, see documentation for more info*/
val result2 = df.withColumn("angle_in_degrees", toDegrees(col("angle_in_radians")))
Copy

推奨される修正

回避策として、 degrees 関数を使用することができます。文字列引数を受け取るSparkオーバーロードでは、さらに com.snowflake.snowpark.functions.col 関数を使用して文字列を列オブジェクトに変換する必要があります。

val df = Seq(Math.PI, Math.PI / 2, Math.PI / 4).toDF("angle_in_radians")
val result1 = df.withColumn("angle_in_degrees", degrees(col("angle_in_radians")))
val result2 = df.withColumn("angle_in_degrees", degrees(col("angle_in_radians")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1158

メッセージ: org.apache.spark.sql.functions.skewness has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.skewness 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.skewness 関数の例です。この例では、選択された列の歪度を計算するために、 skewness 関数が使用されています。

val df = Seq("1", "2", "3").toDF("elements")
val result1 = skewness(col("elements"))
val result2 = skewness("elements")
Copy

出力

SMA は出力コードに EWI SPRKSCL1158 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq("1", "2", "3").toDF("elements")
/*EWI: SPRKSCL1158 => org.apache.spark.sql.functions.skewness has a workaround, see documentation for more info*/
val result1 = skewness(col("elements"))
/*EWI: SPRKSCL1158 => org.apache.spark.sql.functions.skewness has a workaround, see documentation for more info*/
val result2 = skewness("elements")
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 skew があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq("1", "2", "3").toDF("elements")
val result1 = skew(col("elements"))
val result2 = skew(col("elements"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1109

注釈

この問題コードは、 廃止 されました。

メッセージ: The parameter is not defined for org.apache.spark.sql.DataFrameReader.option

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.DataFrameReader.option のパラメーターが定義されていないことを SMA が検出した場合に発生します。

シナリオ

入力

以下は、 org.apache.spark.sql.DataFrameReader.option 関数のパラメーターが未定義の例です。

spark.read.option("header", True).json(path)
Copy

出力

SMA は出力コードに EWI SPRKSCL1109 を追加して、org.apache.spark.sql.DataFrameReader.option関数のパラメーターが定義されていないことを知らせます。

/*EWI: SPRKSCL1109 => The parameter header=True is not supported for org.apache.spark.sql.DataFrameReader.option*/
spark.read.option("header", True).json(path)
Copy

推奨される修正

定義されたオプションを識別するには、 ここ にあるSnowparkのドキュメントでリーダーの形式オプションをご確認ください。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1114

メッセージ: org.apache.spark.sql.functions.repeat has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.repeat 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.repeat 関数の例です。

val df = Seq("Hello", "World").toDF("word")
val result = df.withColumn("repeated_word", repeat(col("word"), 3))
Copy

出力

SMA は出力コードに EWI SPRKSCL1114 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq("Hello", "World").toDF("word")
/*EWI: SPRKSCL1114 => org.apache.spark.sql.functions.repeat has a workaround, see documentation for more info*/
val result = df.withColumn("repeated_word", repeat(col("word"), 3))
Copy

推奨される修正

回避策として、 com.snowflake.snowpark.functions.lit 関数を使用して、第2引数を列オブジェクトに変換することができます。

val df = Seq("Hello", "World").toDF("word")
val result = df.withColumn("repeated_word", repeat(col("word"), lit(3)))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1145

メッセージ: org.apache.spark.sql.functions.sumDistinct has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.sumDistinct 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.sumDistinct 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  ("Alice", 10),
  ("Bob", 15),
  ("Alice", 10),
  ("Alice", 20),
  ("Bob", 15)
).toDF("name", "value")

val result1 = df.groupBy("name").agg(sumDistinct("value"))
val result2 = df.groupBy("name").agg(sumDistinct(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1145 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("Alice", 10),
  ("Bob", 15),
  ("Alice", 10),
  ("Alice", 20),
  ("Bob", 15)
).toDF("name", "value")

/*EWI: SPRKSCL1145 => org.apache.spark.sql.functions.sumDistinct has a workaround, see documentation for more info*/
val result1 = df.groupBy("name").agg(sumDistinct("value"))
/*EWI: SPRKSCL1145 => org.apache.spark.sql.functions.sumDistinct has a workaround, see documentation for more info*/
val result2 = df.groupBy("name").agg(sumDistinct(col("value")))
Copy

推奨される修正

回避策として、 sum_distinct 関数を使用することができます。文字列引数を受け取るSparkオーバーロードでは、さらに com.snowflake.snowpark.functions.col 関数を使用して文字列を列オブジェクトに変換する必要があります。

val df = Seq(
  ("Alice", 10),
  ("Bob", 15),
  ("Alice", 10),
  ("Alice", 20),
  ("Bob", 15)
).toDF("name", "value")

val result1 = df.groupBy("name").agg(sum_distinct(col("value")))
val result2 = df.groupBy("name").agg(sum_distinct(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1171

メッセージ: Snowpark does not support split functions with more than two parameters or containing regex pattern.詳細については、ドキュメントをご参照ください。

カテゴリ: 警告。

説明

この問題は、 org.apache.spark.sql.functions.split に2つ以上のパラメーターがあるか、正規表現パターンが含まれていることを SMA が検出した場合に発生します。

シナリオ

split 関数は、与えられたパターンにマッチする列を区切るために使われます。このSpark関数には3つのオーバーロードがあります。

シナリオ1

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.split 関数の例です。この例では、 split 関数に2つのパラメーターがあり、2番目の引数は正規表現パターンではなく文字列です。

val df = Seq("Snowflake", "Snowpark", "Snow", "Spark").toDF("words")
val result = df.select(split(col("words"), "Snow"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1171 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせます。

val df = Seq("Snowflake", "Snowpark", "Snow", "Spark").toDF("words")
/* EWI: SPRKSCL1171 => Snowpark does not support split functions with more than two parameters or containing regex pattern. See documentation for more info. */
val result = df.select(split(col("words"), "Snow"))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 split があります。そのため、第2引数に文字列引数を受け取り、それが正規表現パターンではないSparkオーバーロードについては、回避策として com.snowflake.snowpark.functions.lit 関数を使用して文字列を列オブジェクトに変換することができます。

val df = Seq("Snowflake", "Snowpark", "Snow", "Spark").toDF("words")
val result = df.select(split(col("words"), lit("Snow")))
Copy
シナリオ2

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.split 関数の例です。この例では、 split 関数に2つのパラメーターがあり、2番目の引数は正規表現パターンです。

val df = Seq("Snowflake", "Snowpark", "Snow", "Spark").toDF("words")
val result = df.select(split(col("words"), "^([\\d]+-[\\d]+-[\\d])"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1171 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせます。これは、正規表現のパターンがSnowflakeでサポートされていないためです。

val df = Seq("Snowflake", "Snowpark", "Snow", "Spark").toDF("words")
/* EWI: SPRKSCL1171 => Snowpark does not support split functions with more than two parameters or containing regex pattern. See documentation for more info. */
val result = df.select(split(col("words"), "^([\\d]+-[\\d]+-[\\d])"))
Copy

推奨される修正

Snowflakeは正規表現パターンをサポートしていないため、正規表現パターンではない文字列で置き換えてみてください。

シナリオ3

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.split 関数の例です。この例では、 split 関数に2つ以上のパラメーターがあります。

val df = Seq("Snowflake", "Snowpark", "Snow", "Spark").toDF("words")
val result = df.select(split(df("words"), "Snow", 3))
Copy

出力

SMA は出力コードに EWI SPRKSCL1171 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせます。これは、Snowflakeには2つを超えるパラメーターのある分割関数がないためです。

val df = Seq("Snowflake", "Snowpark", "Snow", "Spark").toDF("words")
/* EWI: SPRKSCL1171 => Snowpark does not support split functions with more than two parameters or containing regex pattern. See documentation for more info. */
val result3 = df.select(split(df("words"), "Snow", 3))
Copy

推奨される修正

Snowflakeは2つ以上のパラメーターを持つ分割関数をサポートしていないため、Snowflakeがサポートしている分割関数を使用してみてください。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1120

メッセージ: org.apache.spark.sql.functions.asin has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.asin 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.asin 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(0.5, 0.6, -0.5).toDF("value")
val result1 = df.select(col("value"), asin("value").as("asin_value"))
val result2 = df.select(col("value"), asin(col("value")).as("asin_value"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1120 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(0.5, 0.6, -0.5).toDF("value")
/*EWI: SPRKSCL1120 => org.apache.spark.sql.functions.asin has a workaround, see documentation for more info*/
val result1 = df.select(col("value"), asin("value").as("asin_value"))
/*EWI: SPRKSCL1120 => org.apache.spark.sql.functions.asin has a workaround, see documentation for more info*/
val result2 = df.select(col("value"), asin(col("value")).as("asin_value"))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 asin があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(0.5, 0.6, -0.5).toDF("value")
val result1 = df.select(col("value"), asin(col("value")).as("asin_value"))
val result2 = df.select(col("value"), asin(col("value")).as("asin_value"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1130

メッセージ: org.apache.spark.sql.functions.greatest has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.greatest 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.greatest 関数の例です。最初に引数として複数の列名に使用し、最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  ("apple", 10, 20, 15),
  ("banana", 5, 25, 18),
  ("mango", 12, 8, 30)
).toDF("fruit", "value1", "value2", "value3")

val result1 = df.withColumn("greatest", greatest("value1", "value2", "value3"))
val result2 = df.withColumn("greatest", greatest(col("value1"), col("value2"), col("value3")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1130 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("apple", 10, 20, 15),
  ("banana", 5, 25, 18),
  ("mango", 12, 8, 30)
).toDF("fruit", "value1", "value2", "value3")

/*EWI: SPRKSCL1130 => org.apache.spark.sql.functions.greatest has a workaround, see documentation for more info*/
val result1 = df.withColumn("greatest", greatest("value1", "value2", "value3"))
/*EWI: SPRKSCL1130 => org.apache.spark.sql.functions.greatest has a workaround, see documentation for more info*/
val result2 = df.withColumn("greatest", greatest(col("value1"), col("value2"), col("value3")))
Copy

推奨される修正

Snowparkには、複数の列オブジェクトを引数として受け取る同等の関数 greatest があります。そのため、列オブジェクトを引数として受け取るSparkオーバーロードはSnowparkで直接サポートされており、変更は必要ありません。

複数の文字列引数を受け取るオーバーロードでは、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換できます。

val df = Seq(
  ("apple", 10, 20, 15),
  ("banana", 5, 25, 18),
  ("mango", 12, 8, 30)
).toDF("fruit", "value1", "value2", "value3")

val result1 = df.withColumn("greatest", greatest(col("value1"), col("value2"), col("value3")))
val result2 = df.withColumn("greatest", greatest(col("value1"), col("value2"), col("value3")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。


説明: >- SnowparkとSnowpark Extensionsはプロジェクト構成ファイルに追加されませんでした。


SPRKSCL1161

メッセージ: Failed to add dependencies.

カテゴリ: 変換エラー。

説明

この問題は、 SMA でサポートされていないSparkバージョンがプロジェクト構成ファイルで SMA により検出された場合に発生します。このため、 SMA は、SnowparkおよびSnowpark Extensionsの依存関係を対応するプロジェクト構成ファイルに追加できませんでした。Snowpark依存関係が追加されていない場合、移行されたコードはコンパイルされません。

シナリオ

sbt、gradle、pom.xmlの3つのシナリオが考えられます。SMA は、Spark依存関係を削除し、SnowparkとSnowpark Extensions依存関係を追加することで、プロジェクト構成ファイルを処理しようとします。

シナリオ1

入力

以下は、 sbt プロジェクト構成ファイルの dependancies セクションの例です。

...
libraryDependencies += "org.apache.spark" % "spark-core_2.13" % "3.5.3"
libraryDependencies += "org.apache.spark" % "spark-sql_2.13" % "3.5.3"
...
Copy

出力

Sparkバージョンがサポートされていないため、 SMA は、 EWI SPRKSCL1161 を問題インベントリに追加し、出力はそのままにします。

...
libraryDependencies += "org.apache.spark" % "spark-core_2.13" % "3.5.3"
libraryDependencies += "org.apache.spark" % "spark-sql_2.13" % "3.5.3"
...
Copy

推奨される修正

手動で、Sparkの依存関係を削除し、SnowparkとSnowpark Extensionsの依存関係を sbt プロジェクトの構成ファイルに追加します。

...
libraryDependencies += "com.snowflake" % "snowpark" % "1.14.0"
libraryDependencies += "net.mobilize.snowpark-extensions" % "snowparkextensions" % "0.0.18"
...
Copy

プロジェクトの要件に最適なSnowparkバージョンを使用してください。

シナリオ2

入力

以下は、 gradle プロジェクト構成ファイルの dependencies セクションの例です。

dependencies {
    implementation group: 'org.apache.spark', name: 'spark-core_2.13', version: '3.5.3'
    implementation group: 'org.apache.spark', name: 'spark-sql_2.13', version: '3.5.3'
    ...
}
Copy

出力

Sparkバージョンがサポートされていないため、 SMA は、 EWI SPRKSCL1161 を問題インベントリに追加し、出力はそのままにします。

dependencies {
    implementation group: 'org.apache.spark', name: 'spark-core_2.13', version: '3.5.3'
    implementation group: 'org.apache.spark', name: 'spark-sql_2.13', version: '3.5.3'
    ...
}
Copy

推奨される修正

手動で、Sparkの依存関係を削除し、SnowparkとSnowpark Extensionsの依存関係を gradle プロジェクトの構成ファイルに追加します。

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

依存関係のバージョンが、ご自身のプロジェクトのニーズに従っていることを確認してください。

シナリオ3

入力

以下は、 pom.xml プロジェクト構成ファイルの dependencies セクションの例です。

<dependencies>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.13</artifactId>
    <version>3.5.3</version>
  </dependency>

  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.13</artifactId>
    <version>3.5.3</version>
    <scope>compile</scope>
  </dependency>
  ...
</dependencies>
Copy

出力

Sparkバージョンがサポートされていないため、 SMA は、 EWI SPRKSCL1161 を問題インベントリに追加し、出力はそのままにします。

<dependencies>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.13</artifactId>
    <version>3.5.3</version>
  </dependency>

  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.13</artifactId>
    <version>3.5.3</version>
    <scope>compile</scope>
  </dependency>
  ...
</dependencies>
Copy

推奨される修正

手動で、Sparkの依存関係を削除し、SnowparkとSnowpark Extensionsの依存関係を gradle プロジェクトの構成ファイルに追加します。

<dependencies>
  <dependency>
    <groupId>com.snowflake</groupId>
    <artifactId>snowpark</artifactId>
    <version>1.14.2</version>
  </dependency>

  <dependency>
    <groupId>net.mobilize.snowpark-extensions</groupId>
    <artifactId>snowparkextensions</artifactId>
    <version>0.0.18</version>
  </dependency>
  ...
</dependencies>
Copy

依存関係のバージョンが、ご自身のプロジェクトのニーズに従っていることを確認してください。

その他の推奨事項

  • 入力にプロジェクト構成ファイルがあることを確認してください。

    • build.sbt

    • build.gradle

    • pom.xml

  • SMA がサポートするSparkのバージョンは2.12:3.1.2です。

  • Snowparkの最新バージョンは こちら でご確認ください。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1155

警告

Spark Conversion Coreバージョン4.3.2 以降、この問題コードは 廃止 されています

メッセージ: org.apache.spark.sql.functions.countDistinct has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.countDistinct 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.countDistinct 関数の例です。最初に引数として列名に使用し、最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  ("Alice", 1),
  ("Bob", 2),
  ("Alice", 3),
  ("Bob", 4),
  ("Alice", 1),
  ("Charlie", 5)
).toDF("name", "value")

val result1 = df.select(countDistinct("name", "value"))
val result2 = df.select(countDistinct(col("name"), col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1155 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("Alice", 1),
  ("Bob", 2),
  ("Alice", 3),
  ("Bob", 4),
  ("Alice", 1),
  ("Charlie", 5)
).toDF("name", "value")

/*EWI: SPRKSCL1155 => org.apache.spark.sql.functions.countDistinct has a workaround, see documentation for more info*/
val result1 = df.select(countDistinct("name", "value"))
/*EWI: SPRKSCL1155 => org.apache.spark.sql.functions.countDistinct has a workaround, see documentation for more info*/
val result2 = df.select(countDistinct(col("name"), col("value")))
Copy

推奨される修正

回避策として、 count_distinct 関数を使用することができます。文字列引数を受け取るSparkオーバーロードでは、さらに com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換する必要があります。

val df = Seq(
  ("Alice", 1),
  ("Bob", 2),
  ("Alice", 3),
  ("Bob", 4),
  ("Alice", 1),
  ("Charlie", 5)
).toDF("name", "value")

val result1 = df.select(count_distinct(col("name"), col("value")))
val result2 = df.select(count_distinct(col("name"), col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1104

この問題コードは、 廃止 されました。

メッセージ: Spark Session builder option is not supported.

カテゴリ: 変換エラー。

説明

この問題は、 org.apache.spark.sql.SparkSession.Builder.config 関数の使用を SMA が検出した場合に表示されます。この関数はSparkセッションのオプションを設定しており、Snowparkではサポートされていません。

シナリオ

入力

以下は、 org.apache.spark.sql.SparkSession.Builder.config 関数を使用して、Sparkセッションのオプションを設定する例です。

val spark = SparkSession.builder()
           .master("local")
           .appName("testApp")
           .config("spark.sql.broadcastTimeout", "3600")
           .getOrCreate()
Copy

出力

SMA は出力コードに EWI SPRKSCL1104 を追加し、configメソッドがSnowparkでサポートされていないことを知らせます。この場合は、config関数でSparkセッションのオプションを設定できず、Sparkセッションステートメントの移行に影響を与える可能性があります。

val spark = Session.builder.configFile("connection.properties")
/*EWI: SPRKSCL1104 => SparkBuilder Option is not supported .config("spark.sql.broadcastTimeout", "3600")*/
.create()
Copy

推奨される修正

セッションを作成するには、適切なSnowflake Snowparkの構成を追加する必要があります。

この例ではconfigs変数が使われています。

    val configs = Map (
      "URL" -> "https://<myAccount>.snowflakecomputing.com:<port>",
      "USER" -> <myUserName>,
      "PASSWORD" -> <myPassword>,
      "ROLE" -> <myRole>,
      "WAREHOUSE" -> <myWarehouse>,
      "DB" -> <myDatabase>,
      "SCHEMA" -> <mySchema>
    )
    val session = Session.builder.configs(configs).create
Copy

また、接続情報を含むconfigFile (profile.properties)の使用を推奨します。

## profile.properties file (a text file)
URL = https://<account_identifier>.snowflakecomputing.com
USER = <username>
PRIVATEKEY = <unencrypted_private_key_from_the_private_key_file>
ROLE = <role_name>
WAREHOUSE = <warehouse_name>
DB = <database_name>
SCHEMA = <schema_name>
Copy

そして、 Session.builder.configFile を使用してセッションを作成することができます。

val session = Session.builder.configFile("/path/to/properties/file").create
Copy

その他の推奨事項

SPRKSCL1124

メッセージ: org.apache.spark.sql.functions.cosh has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.cosh 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.cosh 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(0.0, 1.0, 2.0, -1.0).toDF("value")
val result1 = df.withColumn("cosh_value", cosh("value"))
val result2 = df.withColumn("cosh_value", cosh(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1124 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(0.0, 1.0, 2.0, -1.0).toDF("value")
/*EWI: SPRKSCL1124 => org.apache.spark.sql.functions.cosh has a workaround, see documentation for more info*/
val result1 = df.withColumn("cosh_value", cosh("value"))
/*EWI: SPRKSCL1124 => org.apache.spark.sql.functions.cosh has a workaround, see documentation for more info*/
val result2 = df.withColumn("cosh_value", cosh(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 cosh があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(0.0, 1.0, 2.0, -1.0).toDF("value")
val result1 = df.withColumn("cosh_value", cosh(col("value")))
val result2 = df.withColumn("cosh_value", cosh(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1175

メッセージ: The two-parameterudffunction is not supported in Snowpark.単一パラメーター udf 関数に変換する必要があります。Snowparkで動作するように手動でコードを修正する方法については、ドキュメントをご確認ください。

カテゴリ: 変換エラー。

説明

この問題は、 org.apache.spark.sql.functions.udf 関数の使用を SMA がソースコード内で検出した場合に発生します。Snowparkには2つのパラメーターがある同等の udf 関数がないため、出力コードがコンパイルされない可能性があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.udf 関数の例です。この例では、 udf 関数には2つのパラメーターがあります。

val myFuncUdf = udf(new UDF1[String, Integer] {
  override def call(s: String): Integer = s.length()
}, IntegerType)
Copy

出力

SMA は出力コードに EWI SPRKSCL1175 を追加して、 udf 関数にはパラメーターが2つあるためサポートされていないことを知らせます。

/*EWI: SPRKSCL1175 => The two-parameter udf function is not supported in Snowpark. It should be converted into a single-parameter udf function. Please check the documentation to learn how to manually modify the code to make it work in Snowpark.*/
val myFuncUdf = udf(new UDF1[String, Integer] {
  override def call(s: String): Integer = s.length()
}, IntegerType)
Copy

推奨される修正

Snowparkでは、単一パラメーター udf 関数(戻り値タイプパラメーターなし)のみがサポートされているため、Snowparkで動作させるには、2つのパラメーターがある udf 関数を単一パラメーター udf 関数に変換する必要があります。

たとえば、上記のサンプルコードの場合は、手動で次のように変換する必要があります。

val myFuncUdf = udf((s: String) => s.length())
Copy

Snowparkで udf を作成する場合には、いくつかの注意点があり、手動でコードを変更する必要があることに注意してください。Snowparkでの単一パラメーター udf 関数の作成に関連するその他の推奨事項は こちら をご参照ください。

その他の推奨事項

SPRKSCL1001

メッセージ: This code section has parsing errors.The parsing error was found at: line _ line number _, column _ column number _.When trying to parse _ statement _.This file was not converted, so it is expected to still have references to the Spark API.

カテゴリ: 解析エラー。

説明

このエラーは、 SMA がファイルのコードを正しく読み取れない、または理解できないステートメントを検出した場合に発生します。これは 解析エラー と呼ばれます。また、この問題は、ファイルに1つ以上の解析エラーがある場合に発生します。

シナリオ

入力

以下は無効なScalaコードの例です。

/#/(%$"$%

Class myClass {

    def function1() = { 1 }

}
Copy

出力

SMA は出力コードに EWI SPRKSCL1001 を追加して、ファイルのコードに解析エラーがあることを知らせます。したがって、 SMA は、このエラーのファイルを処理することができません。

// **********************************************************************************************************************
// EWI: SPRKSCL1001 => This code section has parsing errors
// The parsing error was found at: line 0, column 0. When trying to parse ''.
// This file was not converted, so it is expected to still have references to the Spark API
// **********************************************************************************************************************
/#/(%$"$%

Class myClass {

    def function1() = { 1 }

}
Copy

推奨される修正

メッセージはエラーステートメントをピンポイントで示しているため、無効な構文を特定してそれを削除するか、そのステートメントをコメントアウトして解析エラーを回避することができます。

Class myClass {

    def function1() = { 1 }

}
Copy
// /#/(%$"$%

Class myClass {

    def function1() = { 1 }

}
Copy

その他の推奨事項

  • ファイルのコードが有効なScalaコードであることを確認します。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1141

メッセージ: org.apache.spark.sql.functions.stddev_pop has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.stddev_pop 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

以下は、 org.apache.spark.sql.functions.stddev_pop 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

入力

val df = Seq(
  ("Alice", 23),
  ("Bob", 30),
  ("Carol", 27),
  ("David", 25),
).toDF("name", "age")

val result1 = df.select(stddev_pop("age"))
val result2 = df.select(stddev_pop(col("age")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1141 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("Alice", 23),
  ("Bob", 30),
  ("Carol", 27),
  ("David", 25),
).toDF("name", "age")

/*EWI: SPRKSCL1141 => org.apache.spark.sql.functions.stddev_pop has a workaround, see documentation for more info*/
val result1 = df.select(stddev_pop("age"))
/*EWI: SPRKSCL1141 => org.apache.spark.sql.functions.stddev_pop has a workaround, see documentation for more info*/
val result2 = df.select(stddev_pop(col("age")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 stddev_pop があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(
  ("Alice", 23),
  ("Bob", 30),
  ("Carol", 27),
  ("David", 25),
).toDF("name", "age")

val result1 = df.select(stddev_pop(col("age")))
val result2 = df.select(stddev_pop(col("age")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1110

注釈

この問題コードは、 廃止 されました。

メッセージ: Reader method not supported _ method name _.

カテゴリ: 警告

説明

この問題は、 DataFrameReader メソッドチェーンでSnowflakeがサポートしていないメソッドを SMA が検出した場合に表示されます。この場合、リーダーステートメントの移行に影響を与える可能性があります。

シナリオ

入力

以下は、ロードメソッドがSnowflakeでサポートされていない DataFrameReader メソッドチェーンの例です。

spark.read.
    format("net.snowflake.spark.snowflake").
    option("query", s"select * from $tablename")
    load()
Copy

出力

SMA は出力コードに EWI SPRKSCL1110 を追加して、ロードメソッドがSnowparkでサポートされていないことを知らせます。この場合、リーダーステートメントの移行に影響を与える可能性があります。

session.sql(s"select * from $tablename")
/*EWI: SPRKSCL1110 => Reader method not supported .load()*/
Copy

推奨される修正

Snowflakeでサポートされているメソッドを知るために、リーダー用Snowparkドキュメントを ここ でご確認ください。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1100

この問題コードは、 Spark Conversion Core 2.3.22 以降 廃止 されています

メッセージ: Repartition is not supported.

カテゴリ: 解析エラー。

説明

この問題は、 org.apache.spark.sql.DataFrame.repartition 関数の使用を SMA が検出した場合に発生します。この関数はSnowparkではサポートされていません。Snowflakeはストレージとクラスタ上のワークロードを管理するため、再パーティション操作は適用できません。

シナリオ

入力

以下は、 org.apache.spark.sql.DataFrame.repartition 関数を使用して、指定されたパーティション分割式でパーティションされた新しい DataFrame を返す例です。

    var nameData = Seq("James", "Sarah", "Dylan", "Leila, "Laura", "Peter")
    var jobData = Seq("Police", "Doctor", "Actor", "Teacher, "Dentist", "Fireman")
    var ageData = Seq(40, 38, 34, 27, 29, 55)

    val dfName = nameData.toDF("name")
    val dfJob = jobData.toDF("job")
    val dfAge = ageData.toDF("age")

    val dfRepartitionByExpresion = dfName.repartition($"name")

    val dfRepartitionByNumber = dfJob.repartition(3)

    val dfRepartitionByBoth = dfAge.repartition(3, $"age")

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

出力

SMA は出力コードに EWI SPRKSCL1100 を追加して、この関数がSnowparkでサポートされていないことを知らせます。

    var nameData = Seq("James", "Sarah", "Dylan", "Leila, "Laura", "Peter")
    var jobData = Seq("Police", "Doctor", "Actor", "Teacher, "Dentist", "Fireman")
    var ageData = Seq(40, 38, 34, 27, 29, 55)

    val dfName = nameData.toDF("name")
    val dfJob = jobData.toDF("job")
    val dfAge = ageData.toDF("age")

    /*EWI: SPRKSCL1100 => Repartition is not supported*/
    val dfRepartitionByExpresion = dfName.repartition($"name")

    /*EWI: SPRKSCL1100 => Repartition is not supported*/
    val dfRepartitionByNumber = dfJob.repartition(3)

    /*EWI: SPRKSCL1100 => Repartition is not supported*/
    val dfRepartitionByBoth = dfAge.repartition(3, $"age")

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

推奨される修正

Snowflakeはストレージとクラスタ上のワークロードを管理するため、再パーティション操作は適用できません。つまり、結合の前に再パーティションを使用する必要はまったくありません。

    var nameData = Seq("James", "Sarah", "Dylan", "Leila, "Laura", "Peter")
    var jobData = Seq("Police", "Doctor", "Actor", "Teacher, "Dentist", "Fireman")
    var ageData = Seq(40, 38, 34, 27, 29, 55)

    val dfName = nameData.toDF("name")
    val dfJob = jobData.toDF("job")
    val dfAge = ageData.toDF("age")

    val dfRepartitionByExpresion = dfName

    val dfRepartitionByNumber = dfJob

    val dfRepartitionByBoth = dfAge

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

その他の推奨事項

SPRKSCL1151

メッセージ: org.apache.spark.sql.functions.var_samp has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.var_samp 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.var_samp 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  ("A", 10),
  ("A", 20),
  ("A", 30),
  ("B", 40),
  ("B", 50),
  ("B", 60)
).toDF("category", "value")

val result1 = df.groupBy("category").agg(var_samp("value"))
val result2 = df.groupBy("category").agg(var_samp(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1151 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("A", 10),
  ("A", 20),
  ("A", 30),
  ("B", 40),
  ("B", 50),
  ("B", 60)
).toDF("category", "value")

/*EWI: SPRKSCL1151 => org.apache.spark.sql.functions.var_samp has a workaround, see documentation for more info*/
val result1 = df.groupBy("category").agg(var_samp("value"))
/*EWI: SPRKSCL1151 => org.apache.spark.sql.functions.var_samp has a workaround, see documentation for more info*/
val result2 = df.groupBy("category").agg(var_samp(col("value")))
Copy

推奨される修正

Snowparkには、引数として列オブジェクトを受け取る同等の関数 var_samp があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(
  ("A", 10),
  ("A", 20),
  ("A", 30),
  ("B", 40),
  ("B", 50),
  ("B", 60)
).toDF("category", "value")

val result1 = df.groupBy("category").agg(var_samp(col("value")))
val result2 = df.groupBy("category").agg(var_samp(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。


説明: >- DataFrameReader メソッドチェーンのリーダーの形式はSnowparkによって定義されたものではありません。


SPRKSCL1165

メッセージ: Reader format on DataFrameReader method chaining can't be defined

カテゴリ: 警告

説明

この問題は、 DataFrameReader メソッドチェーン中のリーダの 形式 が、Snowparkでサポートされている avrocsvjsonorcparquetxml のいずれでもないことを SMA が検出した場合に発生します。そのため、 SMA は、設定オプションが定義されているかどうかを判断することができません。

シナリオ

入力

以下は、 DataFrameReader メソッドチェーンの例です。 SMA は、リーダーの形式を決定することができます。

spark.read.format("net.snowflake.spark.snowflake")
                 .option("query", s"select * from $tableName")
                 .load()
Copy

出力

SMA は出力コードに EWI SPRKSCL1165 を追加して、 DataFrameReader メソッドチェーンの提供では、リーダーの 形式 を決定できないことを知らせます。

/*EWI: SPRKSCL1165 => Reader format on DataFrameReader method chaining can't be defined*/
spark.read.option("query", s"select * from $tableName")
                 .load()
Copy

推奨される修正

ここ にあるSnowparkのドキュメントで、リーダーの形式に関する情報をご確認ください。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1134

メッセージ: org.apache.spark.sql.functions.log has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.log 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.log 関数の例です。

val df = Seq(10.0, 20.0, 30.0, 40.0).toDF("value")
val result1 = df.withColumn("log_value", log(10, "value"))
val result2 = df.withColumn("log_value", log(10, col("value")))
val result3 = df.withColumn("log_value", log("value"))
val result4 = df.withColumn("log_value", log(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1134 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(10.0, 20.0, 30.0, 40.0).toDF("value")
/*EWI: SPRKSCL1134 => org.apache.spark.sql.functions.log has a workaround, see documentation for more info*/
val result1 = df.withColumn("log_value", log(10, "value"))
/*EWI: SPRKSCL1134 => org.apache.spark.sql.functions.log has a workaround, see documentation for more info*/
val result2 = df.withColumn("log_value", log(10, col("value")))
/*EWI: SPRKSCL1134 => org.apache.spark.sql.functions.log has a workaround, see documentation for more info*/
val result3 = df.withColumn("log_value", log("value"))
/*EWI: SPRKSCL1134 => org.apache.spark.sql.functions.log has a workaround, see documentation for more info*/
val result4 = df.withColumn("log_value", log(col("value")))
Copy

推奨される修正

以下は、 log 関数のすべてのオーバーロードに対するさまざまな回避策です。

1. def log(base: Double, columnName: String): 列

com.snowflake.snowpark.functions.lit 関数を使用して、ベースを列オブジェクトに変換し、 com.snowflake.snowpark.functions.col 関数を使用して、列名を列オブジェクトに変換することができます。

val result1 = df.withColumn("log_value", log(lit(10), col("value")))
Copy

2. def log(base: Double, a: Column): 列

com.snowflake.snowpark.functions.lit 関数を使用して、ベースを列オブジェクトに変換できます。

val result2 = df.withColumn("log_value", log(lit(10), col("value")))
Copy

3.def log(columnName: String): 列

lit(Math.E) を第1引数に渡し、 com.snowflake.snowpark.functions.col 関数を使って列名を列オブジェクトに変換し、第2引数に渡します。

val result3 = df.withColumn("log_value", log(lit(Math.E), col("value")))
Copy

4. def log(e: Column): 列

第1引数に lit(Math.E) を、第2引数に列オブジェクトを渡します。

val result4 = df.withColumn("log_value", log(lit(Math.E), col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1125

警告

この問題コードは、 Spark Conversion Core 2.9.0 以降 廃止 されています

メッセージ: org.apache.spark.sql.functions.count has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.count 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.count 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  ("Alice", "Math"),
  ("Bob", "Science"),
  ("Alice", "Science"),
  ("Bob", null)
).toDF("name", "subject")

val result1 = df.groupBy("name").agg(count("subject").as("subject_count"))
val result2 = df.groupBy("name").agg(count(col("subject")).as("subject_count"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1125 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("Alice", "Math"),
  ("Bob", "Science"),
  ("Alice", "Science"),
  ("Bob", null)
).toDF("name", "subject")

/*EWI: SPRKSCL1125 => org.apache.spark.sql.functions.count has a workaround, see documentation for more info*/
val result1 = df.groupBy("name").agg(count("subject").as("subject_count"))
/*EWI: SPRKSCL1125 => org.apache.spark.sql.functions.count has a workaround, see documentation for more info*/
val result2 = df.groupBy("name").agg(count(col("subject")).as("subject_count"))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 count があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(
  ("Alice", "Math"),
  ("Bob", "Science"),
  ("Alice", "Science"),
  ("Bob", null)
).toDF("name", "subject")

val result1 = df.groupBy("name").agg(count(col("subject")).as("subject_count"))
val result2 = df.groupBy("name").agg(count(col("subject")).as("subject_count"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1174

メッセージ: The single-parameter udf function is supported in Snowpark but it might require manual intervention.Snowparkで動作するように手動でコードを修正する方法については、ドキュメントをご確認ください。

カテゴリ: 警告。

説明

この問題は、単一のパラメーター org.apache.spark.sql.functions.udf 関数の使用を SMA が検出した場合に発生します。その場合は、手動による介入が必要になる可能性があります。

Snowparkの API では、同等の com.snowflake.snowpark.functions.udf 関数が提供されており、Scalaのラムダや関数からユーザー定義関数を作成することができます。しかし、Snowparkで udf を作成する際にはいくつかの注意点があり、適切に動作させるためには手動でコードを変更することが必要になる場合があります。

シナリオ

Snowpark udf 関数は、大半のケースで、手動による介入を必要することなく意図したとおりに機能します。しかし、Snowparkで動作させるために、手動によるコード修正が必要になるシナリオもあります。そのシナリオの一部を以下にリストします。

シナリオ1

入力

以下は、App Traitを使ってオブジェクト内に UDFs を作成する例です。

Scalaの App Traitは、オブジェクト定義内のコードを自動的に実行する main メソッドを提供することで、実行可能なプログラムの作成を簡素化します。App を拡張すると、 main メソッドが実行されるまでフィールドの初期化が遅れます。これは、 UDFs 定義が初期化されたフィールドに依存している場合に影響します。つまり、オブジェクトが App を拡張し、 udf がオブジェクトフィールドを参照する場合は、Snowflakeにアップロードされる udf 定義にはフィールドの初期化値が含まれません。この結果、 null 値が udf から返されることがあります。

たとえば、以下のコードでは、変数myValueは udf 定義の null に解決されます。

object Main extends App {
  ...
  val myValue = 10
  val myUdf = udf((x: Int) => x + myValue) // myValue in the `udf` definition will resolve to null
  ...
}
Copy

出力

SMA は出力コードに EWI SPRKSCL1174 を追加して、単一パラメーター udf 関数がSnowparkでサポートされてはいるものの、手動で操作する必要があることを知らせます。

object Main extends App {
  ...
  val myValue = 10
  /*EWI: SPRKSCL1174 => The single-parameter udf function is supported in Snowpark but it might require manual intervention. Please check the documentation to learn how to manually modify the code to make it work in Snowpark.*/
  val myUdf = udf((x: Int) => x + myValue) // myValue in the `udf` definition will resolve to null
  ...
}
Copy

推奨される修正

この問題を回避するには、 App を拡張せず、コードに対して main メソッドを個別に実装することをお勧めします。これにより、 udf 定義が作成され、Snowflakeにアップロードされる前に、オブジェクトフィールドが初期化されます。

object Main {
  ...
  def main(args: Array[String]): Unit = {
    val myValue = 10
    val myUdf = udf((x: Int) => x + myValue)
  }
  ...
}
Copy

このトピックの詳細については、 App Traitでオブジェクト内に UDFs を作成する際の注意点 をご参照ください。

シナリオ2

入力

以下は、Jupyter Notebooksで UDFs を作成する例です。

def myFunc(s: String): String = {
  ...
}

val myFuncUdf = udf((x: String) => myFunc(x))
df1.select(myFuncUdf(col("name"))).show()
Copy

出力

SMA は出力コードに EWI SPRKSCL1174 を追加して、単一パラメーター udf 関数がSnowparkでサポートされてはいるものの、手動で操作する必要があることを知らせます。

def myFunc(s: String): String = {
  ...
}

/*EWI: SPRKSCL1174 => The single-parameter udf function is supported in Snowpark but it might require manual intervention. Please check the documentation to learn how to manually modify the code to make it work in Snowpark.*/
val myFuncUdf = udf((x: String) => myFunc(x))
df1.select(myFuncUdf(col("name"))).show()
Copy

推奨される修正

Jupyter Notebooksで udf を作成するには、 シリアル化可能 を継承したクラスで関数の実装を定義する必要があります。たとえば、手動でこのように変換します。

object ConvertedUdfFuncs extends Serializable {
  def myFunc(s: String): String = {
    ...
  }

  val myFuncAsLambda = ((x: String) => ConvertedUdfFuncs.myFunc(x))
}

val myFuncUdf = udf(ConvertedUdfFuncs.myFuncAsLambda)
df1.select(myFuncUdf(col("name"))).show()
Copy

Jupyter Notebooksで UDFs を作成する方法の詳細については、 Jupyter Notebooksでの UDFs の作成 をご参照ください。

その他の推奨事項

SPRKSCL1000

メッセージ: Source project spark-core version is _ version number _, the spark-core version supported by snowpark is 2.12:3.1.2 so there may be functional differences between the existing mappings

カテゴリ: 警告

説明

この問題は、 Spark-core のうち、 SMA でサポートされていないバージョンを SMA が検出した場合に発生します。そのため、既存のマッピングとの間に機能差があり、出力が予期せぬ動作をする可能性があります。

その他の推奨事項

  • SMA でサポートされているSpark-coreのバージョンは2.12:3.1.2です。ソースコードのバージョンを変更することを検討してください。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1140

メッセージ: org.apache.spark.sql.functions.stddev has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.stddev 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.stddev 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  ("Alice", 10),
  ("Bob", 15),
  ("Charlie", 20),
  ("David", 25),
).toDF("name", "score")

val result1 = df.select(stddev("score"))
val result2 = df.select(stddev(col("score")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1140 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("Alice", 10),
  ("Bob", 15),
  ("Charlie", 20),
  ("David", 25),
).toDF("name", "score")

/*EWI: SPRKSCL1140 => org.apache.spark.sql.functions.stddev has a workaround, see documentation for more info*/
val result1 = df.select(stddev("score"))
/*EWI: SPRKSCL1140 => org.apache.spark.sql.functions.stddev has a workaround, see documentation for more info*/
val result2 = df.select(stddev(col("score")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 stddev があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(
  ("Alice", 10),
  ("Bob", 15),
  ("Charlie", 20),
  ("David", 25),
).toDF("name", "score")

val result1 = df.select(stddev(col("score")))
val result2 = df.select(stddev(col("score")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1111

注釈

この問題コードは、 廃止 されました。

メッセージ: CreateDecimalType is not supported.

カテゴリ: 変換エラー。

説明

この問題は、 org.apache.spark.sql.types.DataTypes.CreateDecimalType 関数の使用を SMA が検出した場合に表示されます。

シナリオ

入力

以下は、org.apache.spark.sql.types.DataTypes.CreateDecimalType 関数の使用例です。

var result = DataTypes.createDecimalType(18, 8)
Copy

出力

SMA は出力コードに EWI SPRKSCL1111 を追加して、 CreateDecimalType 関数がSnowparkでサポートされていないことを知らせます。

/*EWI: SPRKSCL1111 => CreateDecimalType is not supported*/
var result = createDecimalType(18, 8)
Copy

推奨される修正

推奨される修正はまだありません。

メッセージ: Spark Session builder option is not supported.

カテゴリ: 変換エラー。

説明

この問題は、 org.apache.spark.sql.SparkSession.Builder.config 関数の使用を SMA が検出した場合に表示されます。この関数はSparkセッションのオプションを設定しており、Snowparkではサポートされていません。

シナリオ

入力

以下は、 org.apache.spark.sql.SparkSession.Builder.config 関数を使用して、Sparkセッションのオプションを設定する例です。

val spark = SparkSession.builder()
           .master("local")
           .appName("testApp")
           .config("spark.sql.broadcastTimeout", "3600")
           .getOrCreate()
Copy

出力

SMA は出力コードに EWI SPRKSCL1104 を追加し、configメソッドがSnowparkでサポートされていないことを知らせます。この場合は、config関数でSparkセッションのオプションを設定できず、Sparkセッションステートメントの移行に影響を与える可能性があります。

val spark = Session.builder.configFile("connection.properties")
/*EWI: SPRKSCL1104 => SparkBuilder Option is not supported .config("spark.sql.broadcastTimeout", "3600")*/
.create()
Copy

推奨される修正

セッションを作成するには、適切なSnowflake Snowparkの構成を追加する必要があります。

この例ではconfigs変数が使われています。

    val configs = Map (
      "URL" -> "https://<myAccount>.snowflakecomputing.com:<port>",
      "USER" -> <myUserName>,
      "PASSWORD" -> <myPassword>,
      "ROLE" -> <myRole>,
      "WAREHOUSE" -> <myWarehouse>,
      "DB" -> <myDatabase>,
      "SCHEMA" -> <mySchema>
    )
    val session = Session.builder.configs(configs).create
Copy

また、接続情報を含むconfigFile (profile.properties)の使用を推奨します。

## profile.properties file (a text file)
URL = https://<account_identifier>.snowflakecomputing.com
USER = <username>
PRIVATEKEY = <unencrypted_private_key_from_the_private_key_file>
ROLE = <role_name>
WAREHOUSE = <warehouse_name>
DB = <database_name>
SCHEMA = <schema_name>
Copy

そして、 Session.builder.configFile を使用してセッションを作成することができます。

val session = Session.builder.configFile("/path/to/properties/file").create
Copy

その他の推奨事項

SPRKSCL1101

この問題コードは、 Spark Conversion Core 2.3.22 以降 廃止 されています

メッセージ: Broadcast is not supported

カテゴリ: 警告

説明

この問題は、Snowparkがサポートしていない org.apache.spark.sql.functions.broadcast 関数の使用を SMA が検出した場合に発生します。Snowflakeは ブロードキャスト変数 をサポートしていないため、この関数はサポートされていません。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.broadcast 関数を使用して、各Sparkクラスタで使用するブロードキャストオブジェクトを作成する例です。

    var studentData = Seq(
      ("James", "Orozco", "Science"),
      ("Andrea", "Larson", "Bussiness"),
    )

    var collegeData = Seq(
      ("Arts", 1),
      ("Bussiness", 2),
      ("Science", 3)
    )

    val dfStudent = studentData.toDF("FirstName", "LastName", "CollegeName")
    val dfCollege = collegeData.toDF("CollegeName", "CollegeCode")

    dfStudent.join(
      broadcast(dfCollege),
      Seq("CollegeName")
    )
Copy

出力

SMA は出力コードに EWI SPRKSCL1101 を追加して、この関数がSnowparkでサポートされていないことを知らせます。

    var studentData = Seq(
      ("James", "Orozco", "Science"),
      ("Andrea", "Larson", "Bussiness"),
    )

    var collegeData = Seq(
      ("Arts", 1),
      ("Bussiness", 2),
      ("Science", 3)
    )

    val dfStudent = studentData.toDF("FirstName", "LastName", "CollegeName")
    val dfCollege = collegeData.toDF("CollegeName", "CollegeCode")

    dfStudent.join(
      /*EWI: SPRKSCL1101 => Broadcast is not supported*/
      broadcast(dfCollege),
      Seq("CollegeName")
    )
Copy

推奨される修正

Snowflakeはストレージとクラスター上のワークロードを管理するため、ブロードキャストオブジェクトは適用できません。つまり、ブロードキャストの使用はまったく必要ないということですが、それぞれのケースでさらなる分析が必要です。

推奨される方法は、SparkデータフレームのブロードキャストをSnowparkの通常のデータフレームで置き換えるか、データフレームメソッドを 結合 として使用することです。

提案の入力修正は、データフレーム用にブロードキャストを使用せず、直接データフレーム collegeDF を使用して結合するように作り変えることです。

    var studentData = Seq(
      ("James", "Orozco", "Science"),
      ("Andrea", "Larson", "Bussiness"),
    )

    var collegeData = Seq(
      ("Arts", 1),
      ("Bussiness", 2),
      ("Science", 3)
    )

    val dfStudent = studentData.toDF("FirstName", "LastName", "CollegeName")
    val dfCollege = collegeData.toDF("CollegeName", "CollegeCode")

    dfStudent.join(
      dfCollege,
      Seq("CollegeName")
    ).show()
Copy

その他の推奨事項

  • Snowflakeのアーキテクチャガイド には、Snowflakeストレージ管理に関する洞察が記載されています。

  • Snowpark Dataframe 参照は、特定のブロードキャストシナリオをどのように適応させるかに役立ちます。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1150

メッセージ: org.apache.spark.sql.functions.var_pop has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.var_pop 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.var_pop 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(
  ("A", 10.0),
  ("A", 20.0),
  ("A", 30.0),
  ("B", 40.0),
  ("B", 50.0),
  ("B", 60.0)
).toDF("group", "value")

val result1 = df.groupBy("group").agg(var_pop("value"))
val result2 = df.groupBy("group").agg(var_pop(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1150 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(
  ("A", 10.0),
  ("A", 20.0),
  ("A", 30.0),
  ("B", 40.0),
  ("B", 50.0),
  ("B", 60.0)
).toDF("group", "value")

/*EWI: SPRKSCL1150 => org.apache.spark.sql.functions.var_pop has a workaround, see documentation for more info*/
val result1 = df.groupBy("group").agg(var_pop("value"))
/*EWI: SPRKSCL1150 => org.apache.spark.sql.functions.var_pop has a workaround, see documentation for more info*/
val result2 = df.groupBy("group").agg(var_pop(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 var_pop があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(
  ("A", 10.0),
  ("A", 20.0),
  ("A", 30.0),
  ("B", 40.0),
  ("B", 50.0),
  ("B", 60.0)
).toDF("group", "value")

val result1 = df.groupBy("group").agg(var_pop(col("value")))
val result2 = df.groupBy("group").agg(var_pop(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。


説明: >- org.apache.spark.sql.DataFrameReader.option関数のパラメーターが定義されていません。


SPRKSCL1164

注釈

この問題コードは、 廃止 されました。

メッセージ: The parameter is not defined for org.apache.spark.sql.DataFrameReader.option

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.DataFrameReader.option のパラメーターが定義されていないことを SMA が検出した場合に発生します。

シナリオ

入力

以下は、 org.apache.spark.sql.DataFrameReader.option 関数のパラメーターが未定義の例です。

spark.read.option("header", True).json(path)
Copy

出力

SMA は出力コードに EWI SPRKSCL1164 を追加して、org.apache.spark.sql.DataFrameReader.option関数のパラメーターが定義されていないことを知らせます。

/*EWI: SPRKSCL1164 => The parameter header=True is not supported for org.apache.spark.sql.DataFrameReader.option*/
spark.read.option("header", True).json(path)
Copy

推奨される修正

定義されたオプションを識別するには、 ここ にあるSnowparkのドキュメントでリーダーの形式オプションをご確認ください。

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1135

警告

この問題コードは、 Spark Conversion Core 4.3.2 以降 廃止 されています

メッセージ: org.apache.spark.sql.functions.mean has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.mean 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.mean 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(1, 3, 10, 1, 3).toDF("value")
val result1 = df.select(mean("value"))
val result2 = df.select(mean(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1135 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(1, 3, 10, 1, 3).toDF("value")
/*EWI: SPRKSCL1135 => org.apache.spark.sql.functions.mean has a workaround, see documentation for more info*/
val result1 = df.select(mean("value"))
/*EWI: SPRKSCL1135 => org.apache.spark.sql.functions.mean has a workaround, see documentation for more info*/
val result2 = df.select(mean(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 mean があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(1, 3, 10, 1, 3).toDF("value")
val result1 = df.select(mean(col("value")))
val result2 = df.select(mean(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1115

警告

この問題コードは、 Spark Conversion Core Version 4.6.0 以降 廃止 されています

メッセージ: org.apache.spark.sql.functions.round has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.round 関数の使用を SMA が検出した場合に発生します。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.round 関数の例です。

val df = Seq(3.9876, 5.673, 8.1234).toDF("value")
val result1 = df.withColumn("rounded_value", round(col("value")))
val result2 = df.withColumn("rounded_value", round(col("value"), 2))
Copy

出力

SMA は出力コードに EWI SPRKSCL1115 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(3.9876, 5.673, 8.1234).toDF("value")
/*EWI: SPRKSCL1115 => org.apache.spark.sql.functions.round has a workaround, see documentation for more info*/
val result1 = df.withColumn("rounded_value", round(col("value")))
/*EWI: SPRKSCL1115 => org.apache.spark.sql.functions.round has a workaround, see documentation for more info*/
val result2 = df.withColumn("rounded_value", round(col("value"), 2))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 round があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

列オブジェクトとスケールを受け取るオーバーロードについては、 com.snowflake.snowpark.functions.lit 関数を使用して、スケールを列オブジェクトに変換することができます。

val df = Seq(3.9876, 5.673, 8.1234).toDF("value")
val result1 = df.withColumn("rounded_value", round(col("value")))
val result2 = df.withColumn("rounded_value", round(col("value"), lit(2)))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1144

メッセージ: The symbol table could not be loaded

カテゴリ: 解析エラー

説明

この問題は、 SMA の実行プロセスで重大なエラーが発生した場合に表示されます。記号テーブルがロードできないため、 SMA は評価または変換処理を開始できません。

その他の推奨事項

  • これはソースコード自体のエラーとは考えにくく、むしろ SMA がソースコードを処理する方法のエラーです。最良の解決方法は、 SMA 内 に問題を記載することでしょう。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1170

注釈

この問題コードは、 廃止 されました。

メッセージ: sparkConfig member key is not supported with platform specific key.

カテゴリ: 変換エラー

説明

古いバージョンをお使いの場合は、最新のバージョンにアップグレードしてください。

その他の推奨事項

  • アプリケーションを最新バージョンにアップグレードします。

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1121

メッセージ: org.apache.spark.sql.functions.atan has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.atan 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.atan 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(1.0, 0.5, -1.0).toDF("value")
val result1 = df.withColumn("atan_value", atan("value"))
val result2 = df.withColumn("atan_value", atan(col("value")))
Copy

出力

SMA は出力コードに EWI SPRKSCL1121 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(1.0, 0.5, -1.0).toDF("value")
/*EWI: SPRKSCL1121 => org.apache.spark.sql.functions.atan has a workaround, see documentation for more info*/
val result1 = df.withColumn("atan_value", atan("value"))
/*EWI: SPRKSCL1121 => org.apache.spark.sql.functions.atan has a workaround, see documentation for more info*/
val result2 = df.withColumn("atan_value", atan(col("value")))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 atan があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(1.0, 0.5, -1.0).toDF("value")
val result1 = df.withColumn("atan_value", atan(col("value")))
val result2 = df.withColumn("atan_value", atan(col("value")))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1131

メッセージ: org.apache.spark.sql.functions.grouping has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.grouping 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.grouping 関数の例です。最初に引数として列名に使用し、次に列オブジェクトに使用します。

val df = Seq(("Alice", 2), ("Bob", 5)).toDF("name", "age")
val result1 = df.cube("name").agg(grouping("name"), sum("age"))
val result2 = df.cube("name").agg(grouping(col("name")), sum("age"))
Copy

出力

SMA は出力コードに EWI SPRKSCL1131 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(("Alice", 2), ("Bob", 5)).toDF("name", "age")
/*EWI: SPRKSCL1131 => org.apache.spark.sql.functions.grouping has a workaround, see documentation for more info*/
val result1 = df.cube("name").agg(grouping("name"), sum("age"))
/*EWI: SPRKSCL1131 => org.apache.spark.sql.functions.grouping has a workaround, see documentation for more info*/
val result2 = df.cube("name").agg(grouping(col("name")), sum("age"))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 grouping があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq(("Alice", 2), ("Bob", 5)).toDF("name", "age")
val result1 = df.cube("name").agg(grouping(col("name")), sum("age"))
val result2 = df.cube("name").agg(grouping(col("name")), sum("age"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1160

注釈

この問題コードは、 Spark Conversion Core 4.1.0 以降 廃止 されています

メッセージ: org.apache.spark.sql.functions.sum has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.sum 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、この EWI を生成する org.apache.spark.sql.functions.sum 関数の例です。この例では、 sum 関数を使用して、選択した列の合計を計算しています。

val df = Seq("1", "2", "3", "4", "5").toDF("elements")
val result1 = sum(col("elements"))
val result2 = sum("elements")
Copy

出力

SMA は出力コードに EWI SPRKSCL1160 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq("1", "2", "3", "4", "5").toDF("elements")
/*EWI: SPRKSCL1160 => org.apache.spark.sql.functions.sum has a workaround, see documentation for more info*/
val result1 = sum(col("elements"))
/*EWI: SPRKSCL1160 => org.apache.spark.sql.functions.sum has a workaround, see documentation for more info*/
val result2 = sum("elements")
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 sum があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

val df = Seq("1", "2", "3", "4", "5").toDF("elements")
val result1 = sum(col("elements"))
val result2 = sum(col("elements"))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1154

メッセージ: org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info

カテゴリ: 警告

説明

この問題は、 org.apache.spark.sql.functions.ceil 関数の使用を SMA が検出した場合に発生します。この関数には回避策があります。

シナリオ

入力

以下は、 org.apache.spark.sql.functions.ceil 関数の例です。最初は引数として列名に使用し、次に列オブジェクトに使用し、最後に列オブジェクトとスケールに使用します。

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
val result1 = df.withColumn("ceil", ceil("value"))
val result2 = df.withColumn("ceil", ceil(col("value")))
val result3 = df.withColumn("ceil", ceil(col("value"), lit(1)))
Copy

出力

SMA は出力コードに EWI SPRKSCL1154 を追加して、この関数がSnowparkで完全にはサポートされていないことを知らせますが、回避策があります。

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result1 = df.withColumn("ceil", ceil("value"))
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result2 = df.withColumn("ceil", ceil(col("value")))
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result3 = df.withColumn("ceil", ceil(col("value"), lit(1)))
Copy

推奨される修正

Snowparkには、列オブジェクトを引数として受け取る同等の関数 ceil があります。そのため、列オブジェクトを引数として受け取るSparkのオーバーロードはSnowparkで直接サポートされており、変更の必要はありません。

文字列引数を受け取るオーバーロードについては、回避策として com.snowflake.snowpark.functions.col 関数を使用して、文字列を列オブジェクトに変換することができます。

列オブジェクトとスケールを受け取るオーバーロードでは、 callBuiltin 関数を使用して、Snowflake組み込み CEIL 関数を呼び出すことができます。使用するには、第1引数に文字列 「ceil」 を、第2引数に列を、第3引数にスケールを渡します。

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
val result1 = df.withColumn("ceil", ceil(col("value")))
val result2 = df.withColumn("ceil", ceil(col("value")))
val result3 = df.withColumn("ceil", callBuiltin("ceil", col("value"), lit(1)))
Copy

その他の推奨事項

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。

SPRKSCL1105

この問題コードは、 廃止 されました。

メッセージ: Writer format value is not supported.

カテゴリ: 変換エラー

説明

この問題は、 org.apache.spark.sql.DataFrameWriter.format にSnowparkでサポートされていない引数がある場合に表示されます。

シナリオ

保存を試みている形式のタイプによって、いくつかのシナリオがあります。これは、 サポートされる 形式、または サポートされない 形式です。

シナリオ1

入力

このツールは、保存を試みている形式のタイプを分析します。

  • csv

  • json

  • orc

  • parquet

  • text

    dfWrite.write.format("csv").save(path)
Copy

出力

このツールは、save関数にパラメーターが1 つある場合に、 形式 メソッドを csv メソッド呼び出しに変換します。

    dfWrite.write.csv(path)
Copy

推奨される修正

この場合、ツールは EWI を表示しません。

シナリオ2

入力

以下の例は、 net.snowflake.spark.snowflake の値を渡したときに、 format メソッドをツールがどのように変換するかを示しています。

dfWrite.write.format("net.snowflake.spark.snowflake").save(path)
Copy

出力

ツールは、 net.snowflake.spark.snowflake という値がサポートされていないことを示す EWI SPRKSCL1105 を表示します。

/*EWI: SPRKSCL1105 => Writer format value is not supported .format("net.snowflake.spark.snowflake")*/
dfWrite.write.format("net.snowflake.spark.snowflake").save(path)
Copy

推奨される修正

サポートされていない シナリオについては、読み込もうとしているファイルに依存するため、特定の修正はありません。

シナリオ3

入力

以下の例は、 csv を渡す際にツールが format メソッドを変換する方法を示していますが、代わりに変数を使用しています。

val myFormat = "csv"
dfWrite.write.format(myFormat).save(path)
Copy

出力

ツールはランタイムで変数の値を決定できないため、値がサポートされていないことを示す EWI SPRKSCL1163 を表示します。

val myFormat = "csv"
/*EWI: SPRKSCL1163 => format_type is not a literal and can't be evaluated*/
dfWrite.write.format(myFormat).load(path)
Copy

推奨される修正

回避策として、変数の値をチェックし、 format 呼び出しに文字列として追加することができます。

その他の推奨事項

  • Snowparkロケーションは、 Snowflakeステージ を使用したクラウドロケーションのみを受け付けます。

  • Snowparkがサポートするメソッドのドキュメントは、以下の ドキュメント にあります

  • 詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。