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"))
出力
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"))
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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
出力
SMA は出力コードに EWI SPRKSCL1112
を追加して、この要素がSnowparkでサポートされていないことを知らせます。
val df = session.range(10)
/*EWI: SPRKSCL1112 => org.apache.spark.sql.Dataset.isLocal is not supported*/
val result = df.isLocal
推奨される修正
これは、サポートされていない関数の範囲に適用される一般的なエラーコードであるため、単一の特定の修正方法はありません。適切なアクションは、使用されている特定の要素によって異なります。
その要素がサポートされていないからといって、解決策や回避策が見つからないとは限らないことに注意してください。それは、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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))
出力
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))
推奨される修正
引数を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
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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()")
出力
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()")
推奨される修正
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)
出力
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)
推奨される修正
予期せぬ動作を避けるために、変数の値が有効なものであることを確認してください。
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
SMA は出力コードに EWI SPRKSCL1106
を追加して、オプションメソッドがSnowparkでサポートされていないことを知らせます。
df.write.saveAsTable(tablename)
/*EWI: SPRKSCL1106 => Writer option is not supported .option("dbtable", tablename)*/
推奨される修正
このシナリオに対する推奨される修正はありません
その他の推奨事項¶
詳しいサポートについては、 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")
出力
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")
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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"))
出力
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"))
推奨される修正
回避策として、 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")))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
SMA は出力コードに EWI SPRKSCL1172
を追加して、メタデータパラメーターがSnowflakeでサポートされていないことを知らせます。
/*EWI: SPRKSCL1172 => Snowpark does not support StructFiled with metadata parameter.*/
val result = StructField("f1", StringType(), True, metadata)
推奨される修正
Snowparkには、3つのパラメーターを受け取る同等の関数 com.snowflake.snowpark.types.StructField.apply があります。回避策として、メタデータの引数を削除してみてください。
val result = StructField("f1", StringType(), True, metadata)
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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()
出力
SMA は出力コードに EWI SPRKSCL1107
を追加して、Snowparkがその保存方法をサポートしていないことを知らせます。
df.write.saveAsTable(tablename)
/*EWI: SPRKSCL1107 => Writer method is not supported .save()*/
推奨される修正
このシナリオに対する推奨される修正はありません
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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"))
出力
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"))
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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 }
}
出力
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 }
}
推奨される修正
メッセージはステートメントのエラーをピンポイントで示しているため、無効な構文を特定してそれを削除するか、そのステートメントをコメントアウトして解析エラーを回避することができます。
Class myClass {
def function1() = { 1 }
def function2() = { 2 }
def function3() = { 3 }
}
Class myClass {
// def function1() & = { 1 }
def function2() = { 2 }
def function3() = { 3 }
}
その他の推奨事項¶
ファイルのコードが有効な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()
出力
SMA は出力コードに EWI SPRKSCL1142
を追加して、この要素が定義されていないことを知らせます。
val df = session.range(10)
/*EWI: SPRKSCL1142 => org.apache.spark.sql.DataFrame.notDefinedFunction is not defined*/
val result = df.notDefinedFunction()
推奨される修正
問題の識別を試みるために、以下を検証します。
有効な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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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()
出力
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
推奨される修正
セッションを作成するには、適切な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
また、接続情報を含む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>
そして、 Session.builder.configFile
を使用してセッションを作成することができます。
val session = Session.builder.configFile("/path/to/properties/file").create
その他の推奨事項¶
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。
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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
このツールは、load関数にパラメーターが1つある場合に、 format
メソッドを csv
メソッド呼び出しに変換します。
spark.read.csv(path)
推奨される修正
この場合、ツールは EWI を表示しません。
シナリオ2¶
入力
以下の例は、 net.snowflake.spark.snowflake
の値を渡したときに、 format
メソッドをツールがどのように変換するかを示しています。
spark.read.format("net.snowflake.spark.snowflake").load(path)
出力
ツールは、 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)
推奨される修正
サポートされていない
シナリオについては、読み込もうとしているファイルに依存するため、特定の修正はありません。
シナリオ3¶
入力
以下の例は、 csv
を渡す際にツールが format
メソッドを変換する方法を示していますが、代わりに変数を使用しています。
val myFormat = "csv"
spark.read.format(myFormat).load(path)
出力
ツールはランタイムで変数の値を決定できないため、値がサポートされていないことを示す 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)
推奨される修正
回避策として、変数の値をチェックし、 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"))
出力
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"))
推奨される修正
回避策として、 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")))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
回避策として、 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")))
その他の推奨事項¶
詳しいサポートについては、 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")
出力
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")
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
このツールは、load関数にパラメーターが1つある場合に、 format
メソッドを csv
メソッド呼び出しに変換します。
spark.read.csv(path)
推奨される修正
この場合、ツールは EWI を表示しません。
シナリオ2¶
入力
以下の例は、 net.snowflake.spark.snowflake
の値を渡したときに、 format
メソッドをツールがどのように変換するかを示しています。
spark.read.format("net.snowflake.spark.snowflake").load(path)
出力
ツールは、 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)
推奨される修正
サポートされていない
シナリオについては、読み込もうとしているファイルに依存するため、特定の修正はありません。
シナリオ3¶
入力
以下の例は、 csv
を渡す際にツールが format
メソッドを変換する方法を示していますが、代わりに変数を使用しています。
val myFormat = "csv"
spark.read.format(myFormat).load(path)
出力
ツールはランタイムで変数の値を決定できないため、値がサポートされていないことを示す 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)
推奨される修正
回避策として、変数の値をチェックし、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
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)
推奨される修正
メソッドチェーンのすべての関数呼び出しが同じステートメント内にあることを確認してください。
val reader = spark.read.format("json").load(path)
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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)))
出力
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)))
推奨される修正
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)))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
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)
推奨される修正
このシナリオについては、特に修正はありません。
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
回避策として、 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")))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
回避策として、 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")))
その他の推奨事項¶
詳しいサポートについては、 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")
出力
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")
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
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)
推奨される修正
定義されたオプションを識別するには、 ここ にある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))
出力
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))
推奨される修正
回避策として、 com.snowflake.snowpark.functions.lit 関数を使用して、第2引数を列オブジェクトに変換することができます。
val df = Seq("Hello", "World").toDF("word")
val result = df.withColumn("repeated_word", repeat(col("word"), lit(3)))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
回避策として、 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")))
その他の推奨事項¶
詳しいサポートについては、 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"))
出力
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"))
推奨される修正
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")))
シナリオ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])"))
出力
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])"))
推奨される修正
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))
出力
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))
推奨される修正
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"))
出力
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"))
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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"
...
出力
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"
...
推奨される修正
手動で、Sparkの依存関係を削除し、SnowparkとSnowpark Extensionsの依存関係を sbt
プロジェクトの構成ファイルに追加します。
...
libraryDependencies += "com.snowflake" % "snowpark" % "1.14.0"
libraryDependencies += "net.mobilize.snowpark-extensions" % "snowparkextensions" % "0.0.18"
...
プロジェクトの要件に最適な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'
...
}
出力
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'
...
}
推奨される修正
手動で、Sparkの依存関係を削除し、SnowparkとSnowpark Extensionsの依存関係を gradle
プロジェクトの構成ファイルに追加します。
dependencies {
implementation 'com.snowflake:snowpark:1.14.2'
implementation 'net.mobilize.snowpark-extensions:snowparkextensions:0.0.18'
...
}
依存関係のバージョンが、ご自身のプロジェクトのニーズに従っていることを確認してください。
シナリオ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>
出力
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>
推奨される修正
手動で、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>
依存関係のバージョンが、ご自身のプロジェクトのニーズに従っていることを確認してください。
その他の推奨事項¶
入力にプロジェクト構成ファイルがあることを確認してください。
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")))
出力
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")))
推奨される修正
回避策として、 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")))
その他の推奨事項¶
詳しいサポートについては、 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()
出力
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()
推奨される修正
セッションを作成するには、適切な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
また、接続情報を含む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>
そして、 Session.builder.configFile
を使用してセッションを作成することができます。
val session = Session.builder.configFile("/path/to/properties/file").create
その他の推奨事項¶
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。
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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。
SPRKSCL1175¶
メッセージ: The two-parameterudf
function 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)
出力
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)
推奨される修正
Snowparkでは、単一パラメーター udf
関数(戻り値タイプパラメーターなし)のみがサポートされているため、Snowparkで動作させるには、2つのパラメーターがある udf
関数を単一パラメーター udf
関数に変換する必要があります。
たとえば、上記のサンプルコードの場合は、手動で次のように変換する必要があります。
val myFuncUdf = udf((s: String) => s.length())
Snowparkで udf
を作成する場合には、いくつかの注意点があり、手動でコードを変更する必要があることに注意してください。Snowparkでの単一パラメーター udf
関数の作成に関連するその他の推奨事項は こちら をご参照ください。
その他の推奨事項¶
Snowparkでユーザー定義関数を作成する方法については、 Scalarでの DataFrames 用ユーザー定義関数(UDFs)の作成 のドキュメントをご参照ください。
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。
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 }
}
出力
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 }
}
推奨される修正
メッセージはエラーステートメントをピンポイントで示しているため、無効な構文を特定してそれを削除するか、そのステートメントをコメントアウトして解析エラーを回避することができます。
Class myClass {
def function1() = { 1 }
}
// /#/(%$"$%
Class myClass {
def function1() = { 1 }
}
その他の推奨事項¶
ファイルのコードが有効な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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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()
出力
SMA は出力コードに EWI SPRKSCL1110
を追加して、ロードメソッドがSnowparkでサポートされていないことを知らせます。この場合、リーダーステートメントの移行に影響を与える可能性があります。
session.sql(s"select * from $tablename")
/*EWI: SPRKSCL1110 => Reader method not supported .load()*/
推奨される修正
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)
出力
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)
推奨される修正
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)
その他の推奨事項¶
Snowflakeのアーキテクチャガイド には、Snowflakeストレージ管理に関する洞察が記載されています。
Snowpark Dataframe参照 は、再パーティションの必要なく特定のシナリオを適応させる方法として有用でしょう。
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。
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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。
説明: >- DataFrameReader メソッドチェーンのリーダーの形式はSnowparkによって定義されたものではありません。
SPRKSCL1165¶
メッセージ: Reader format on DataFrameReader method chaining can't be defined
カテゴリ: 警告
説明¶
この問題は、 DataFrameReader メソッドチェーン中のリーダの 形式
が、Snowparkでサポートされている avro
、 csv
、 json
、 orc
、 parquet
、 xml
のいずれでもないことを SMA が検出した場合に発生します。そのため、 SMA は、設定オプションが定義されているかどうかを判断することができません。
シナリオ¶
入力
以下は、 DataFrameReader メソッドチェーンの例です。 SMA は、リーダーの形式を決定することができます。
spark.read.format("net.snowflake.spark.snowflake")
.option("query", s"select * from $tableName")
.load()
出力
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()
推奨される修正
ここ にある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")))
出力
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")))
推奨される修正
以下は、 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")))
2. def log(base: Double, a: Column): 列
com.snowflake.snowpark.functions.lit 関数を使用して、ベースを列オブジェクトに変換できます。
val result2 = df.withColumn("log_value", log(lit(10), col("value")))
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")))
4. def log(e: Column): 列
第1引数に lit(Math.E)
を、第2引数に列オブジェクトを渡します。
val result4 = df.withColumn("log_value", log(lit(Math.E), col("value")))
その他の推奨事項¶
詳しいサポートについては、 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"))
出力
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"))
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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
...
}
出力
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
...
}
推奨される修正
この問題を回避するには、 App
を拡張せず、コードに対して main
メソッドを個別に実装することをお勧めします。これにより、 udf
定義が作成され、Snowflakeにアップロードされる前に、オブジェクトフィールドが初期化されます。
object Main {
...
def main(args: Array[String]): Unit = {
val myValue = 10
val myUdf = udf((x: Int) => x + myValue)
}
...
}
このトピックの詳細については、 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()
出力
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()
推奨される修正
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()
Jupyter Notebooksで UDFs を作成する方法の詳細については、 Jupyter Notebooksでの UDFs の作成 をご参照ください。
その他の推奨事項¶
Snowparkでユーザー定義関数を作成する方法については、 Scalaでの DataFrames 用ユーザー定義関数(UDFs)の作成 ドキュメントをご参照ください
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。
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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
SMA は出力コードに EWI SPRKSCL1111
を追加して、 CreateDecimalType 関数がSnowparkでサポートされていないことを知らせます。
/*EWI: SPRKSCL1111 => CreateDecimalType is not supported*/
var result = createDecimalType(18, 8)
推奨される修正
推奨される修正はまだありません。
メッセージ: 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()
出力
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()
推奨される修正
セッションを作成するには、適切な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
また、接続情報を含む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>
そして、 Session.builder.configFile
を使用してセッションを作成することができます。
val session = Session.builder.configFile("/path/to/properties/file").create
その他の推奨事項¶
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。
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")
)
出力
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")
)
推奨される修正
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()
その他の推奨事項¶
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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
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)
推奨される修正
定義されたオプションを識別するには、 ここ にある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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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))
出力
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))
推奨される修正
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)))
その他の推奨事項¶
詳しいサポートについては、 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")))
出力
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")))
推奨される修正
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")))
その他の推奨事項¶
詳しいサポートについては、 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"))
出力
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"))
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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")
出力
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")
推奨される修正
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"))
その他の推奨事項¶
詳しいサポートについては、 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)))
出力
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)))
推奨される修正
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)))
その他の推奨事項¶
詳しいサポートについては、 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)
出力
このツールは、save関数にパラメーターが1 つある場合に、 形式
メソッドを csv
メソッド呼び出しに変換します。
dfWrite.write.csv(path)
推奨される修正
この場合、ツールは EWI を表示しません。
シナリオ2¶
入力
以下の例は、 net.snowflake.spark.snowflake
の値を渡したときに、 format
メソッドをツールがどのように変換するかを示しています。
dfWrite.write.format("net.snowflake.spark.snowflake").save(path)
出力
ツールは、 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)
推奨される修正
サポートされていない
シナリオについては、読み込もうとしているファイルに依存するため、特定の修正はありません。
シナリオ3¶
入力
以下の例は、 csv
を渡す際にツールが format
メソッドを変換する方法を示していますが、代わりに変数を使用しています。
val myFormat = "csv"
dfWrite.write.format(myFormat).save(path)
出力
ツールはランタイムで変数の値を決定できないため、値がサポートされていないことを示す EWI SPRKSCL1163
を表示します。
val myFormat = "csv"
/*EWI: SPRKSCL1163 => format_type is not a literal and can't be evaluated*/
dfWrite.write.format(myFormat).load(path)
推奨される修正
回避策として、変数の値をチェックし、 format
呼び出しに文字列として追加することができます。
その他の推奨事項¶
Snowparkロケーションは、 Snowflakeステージ を使用したクラウドロケーションのみを受け付けます。
Snowparkがサポートするメソッドのドキュメントは、以下の ドキュメント にあります
詳しいサポートについては、 sma-support@snowflake.com にメールでお問い合わせいただくか、 SMA 内 に問題を投稿してください。