Snowpark Migration Accelerator : Codes de problème pour Spark - Scala

SPRKSCL1126

Message : org.apache.spark.sql.functions.covar_pop a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.covar_pop, qui dispose d’une solution de contournement.

Entrée

Vous trouverez ci-dessous un exemple de fonction org.apache.spark.sql.functions.covar_pop, d’abord utilisée avec des noms de colonne comme arguments, puis avec des objets de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1126 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction covar_pop équivalente qui reçoit deux objets de colonne comme arguments. Pour cette raison, la surcharge Spark qui reçoit deux objets de colonne comme arguments est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit deux arguments de type chaîne, vous pouvez convertir les chaînes en objets de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires

SPRKSCL1112

Message : _ spark element _ n’est pas pris en charge

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque SMA détecte l’utilisation d’un élément Spark qui n’est pas pris en charge par Snowpark, et qui n’a pas son propre code d’erreur associé. Il s’agit d’un code d’erreur générique utilisé par SMA pour tout élément Spark non pris en charge.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’élément Spark qui n’est pas pris en charge par Snowpark et qui génère donc cet EWI.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1112 au code de sortie pour vous indiquer que cet élément n’est pas pris en charge par Snowpark

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

Correction recommandée

Comme il s’agit d’un code d’erreur générique qui s’applique à une série de fonctions non prises en charge, il n’existe pas de correction unique et spécifique. L’action appropriée dépend de l’élément utilisé.

Veuillez noter que même si l’élément n’est pas pris en charge, cela ne signifie pas nécessairement qu’il est impossible de trouver une solution ou une solution de contournement. Cela signifie seulement que l’outil SMA lui-même ne peut pas trouver la solution.

Recommandations supplémentaires

SPRKSCL1143

Message : Une erreur s’est produite lors du chargement de la table des symboles

Catégorie : Erreur de conversion

Description

Ce problème apparaît en cas d’erreur de chargement des symboles dans la table des symboles SMA. La table des symboles fait partie de l’architecture sous-jacente de l’outil SMA, ce qui permet des conversions plus complexes.

Recommandations supplémentaires

  • Il est peu probable qu’il s’agisse d’une erreur dans le code source lui-même, mais plutôt d’une erreur dans la manière dont SMA traite le code source. La meilleure configuration serait de signaler un problème dans SMA.

  • Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.

SPRKSCL1153

Avertissement

Ce code de problème est obsolète depuis Spark Conversion Core Version 4.3.2

Message : org.apache.spark.sql.functions.max a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.max, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.max, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1153 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction max équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1102

Ce code de problème est obsolète depuis Spark Conversion Core 2.3.22

Message : Explode n’est pas pris en charge

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.explode, qui n’est pas prise en charge par Snowpark.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.explode utilisée pour obtenir les informations consolidées des champs du tableau du jeu de données.

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

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

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1102 au code de sortie pour vous indiquer que cette fonction n’est pas prise en charge par Snowpark

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

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

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

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

Correction recommandée

Étant donné que Explode n’est pas pris en charge par Snowpark, la fonction flatten peut être utilisée comme substitut.

La correction suivante crée un aplatissement du dataframe dfExplode, puis effectue la requête pour répliquer le résultat dans Spark.

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

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

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

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

Recommandations supplémentaires

SPRKSCL1136

Avertissement

Ce code de problème est obsolète depuis Spark Conversion Core 4.3.2

Message : org.apache.spark.sql.functions.min a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.min, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.min, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1136 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction min équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui prend un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1167

Message : Fichier de projet introuvable dans le dossier d’entrée

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte que le dossier d’entrée ne contient pas de fichier de configuration de projet. Les fichiers de configuration de projet pris en charge par l’outil SMA sont les suivants :

  • build.sbt

  • build.gradle

  • pom.xml

Recommandations supplémentaires

SPRKSCL1147

Message : org.apache.spark.sql.functions.tanh a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.tanh, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.tan, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1147 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction tanh équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1116

Avertissement

Ce code de problème est obsolète depuis Spark Conversion Core Version 2.40.1

Message : org.apache.spark.sql.functions.split a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.split, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.split qui génère cet EWI.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1116 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Pour la surcharge Spark qui reçoit deux arguments, vous pouvez convertir le deuxième argument en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.lit comme solution de contournement.

La surcharge qui reçoit trois arguments n’est pas encore prise en charge par Snowpark et il n’y a pas de solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1122

Message : org.apache.spark.sql.functions.corr a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.corr, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de fonction org.apache.spark.sql.functions.corr, d’abord utilisée avec des noms de colonne comme arguments, puis avec des objets de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1122 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction corr équivalente qui reçoit deux objets de colonne comme arguments. Pour cette raison, la surcharge Spark qui reçoit des objets de colonne comme arguments est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit deux arguments de type chaîne, vous pouvez convertir les chaînes en objets de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires

SPRKSCL1173

Message : Le code intégré SQL ne peut pas être traité.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte un code intégré SQL qui ne peut pas être traité. Dans ce cas, le code intégré SQLne peut pas être converti en Snowflake.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de code intégré SQL qui ne peut pas être traité.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1173 au code de sortie pour vous indiquer que le code intégré SQL ne peut pas être traité.

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

Correction recommandée

Assurez-vous que le code intégré SQL est une chaîne sans interpolations, variables ou concaténations de chaînes.

Recommandations supplémentaires

SPRKSCL1163

Message : L’élément n’est pas un littéral et ne peut pas être évalué.

Catégorie : Erreur de conversion

Description

Ce problème survient lorsque l’élément de traitement actuel n’est pas un littéral et qu’il ne peut donc pas être évalué par SMA.

Scénario

Entrée

Voici un exemple où l’élément à traiter n’est pas un littéral et ne peut pas être évalué par SMA.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1163 au code de sortie pour vous indiquer que le paramètre format_type n’est pas une valeur littérale et, par conséquent, il ne peut pas être évalué par SMA.

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

Correction recommandée

  • Assurez-vous que la valeur de la variable est valide afin d’éviter des comportements inattendus.

Recommandations supplémentaires

SPRKSCL1132

Message : org.apache.spark.sql.functions.grouping_id a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.grouping_id, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.grouping_id, d’abord utilisée avec plusieurs noms de colonnes comme arguments, puis avec des objets de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1132 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction grouping_id équivalente qui reçoit plusieurs objets de colonne comme arguments. Pour cette raison, la surcharge Spark qui reçoit plusieurs objets de colonne comme arguments est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit plusieurs arguments de type chaîne, vous pouvez convertir les chaînes en objets de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires

SPRKSCL1106

Avertissement

Ce code de problème est maintenant obsolète.

Message : L’option Rédacteur n’est pas prise en charge.

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque l’outil détecte, dans l’instruction du rédacteur, l’utilisation d’une option non prise en charge par Snowpark.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de org.apache.spark.sql.DataFrameWriter.option pour ajouter des options à une instruction du rédacteur.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1106 au code de sortie pour vous indiquer que la méthode option n’est pas prise en charge par Snowpark

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

Correction recommandée

Il n’y a pas de correction recommandée pour ce scénario.

Recommandations supplémentaires

SPRKSCL1157

Message : org.apache.spark.sql.functions.kurtosis a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.kurtosis, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.kurtosis qui génère cet EWI. Dans cet exemple, la fonction kurtosis est utilisée pour calculer le kurtosis de la colonne sélectionnée.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1157 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction kurtosis équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1146

Message : org.apache.spark.sql.functions.tan a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.tan, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.tan, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1146 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction tan équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1117

Avertissement

Ce code de problème est obsolète depuis Spark Conversion Core 2.40.1

Message : org.apache.spark.sql.functions.translate a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.translate, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.translate qui génère cet EWI. Dans cet exemple, la fonction translate est utilisée pour remplacer les caractères “a”, “e” et “o” dans chaque mot par “1”, “2” et “3”, respectivement.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1117 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Pour contourner le problème, vous pouvez convertir les deuxième et troisième arguments en un objet de colonne à l’aide de la fonction com.snowflake.snowpark.functions.lit.

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

Recommandations supplémentaires

SPRKSCL1123

Message : org.apache.spark.sql.functions.cos a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.cos, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.cos, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1123 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction cos équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1172

Message : Snowpark ne prend en charge StructFiled avec le paramètre des métadonnées.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte org.apache.spark.sql.types.StructField.apply avec org.apache.spark.sql.types.Metadata comme paramètre. Ceci est dû au fait que Snowpark ne prend pas en charge le paramètre des métadonnées.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.types.StructField.apply qui génère cet EWI. Dans cet exemple, la fonction apply est utilisée pour générer une instance de StructField.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1172 au code de sortie pour vous indiquer que ce paramètre des métadonnées n’est pas pris en charge par Snowflake.

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

Correction recommandée

Snowpark dispose d’une fonction com.snowflake.snowpark.types.StructField.apply équivalente qui reçoit trois paramètres. Dans ce cas, vous pouvez essayer de supprimer l’argument des métadonnées.

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

Recommandations supplémentaires

SPRKSCL1162

Note

Ce code de problème est maintenant obsolète.

Message : Une erreur s’est produite lors de l’extraction des fichiers dbc.

Catégorie : Avertissement

Description

Ce problème apparaît lorsqu’un fichier dbc ne peut pas être extrait. Cet avertissement peut être dû à une ou plusieurs des raisons suivantes : Trop lourd, inaccessible, en lecture seule, etc.

Recommandations supplémentaires

  • En guise de solution de contournement, vous pouvez vérifier la taille du fichier s’il est trop lourd pour être traité. Analysez également si l’outil peut y accéder afin d’éviter tout problème d’accès.

  • Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.

SPRKSCL1133

Message : org.apache.spark.sql.functions.least a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.least, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.least, d’abord utilisée avec plusieurs noms de colonnes comme arguments, puis avec des objets de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1133 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction least équivalente qui reçoit plusieurs objets de colonne comme arguments. Pour cette raison, la surcharge Spark qui reçoit plusieurs objets de colonne comme arguments est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit plusieurs arguments de type chaîne, vous pouvez convertir les chaînes en objets de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1107

Avertissement

Ce code de problème est maintenant obsolète.

Message : La méthode d’enregistrement du rédacteur n’est pas prise en charge.

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque l’outil détecte, dans l’instruction du rédacteur, l’utilisation d’une option d’enregistrement du rédacteur non prise en charge par Snowpark.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de org.apache.spark.sql.DataFrameWriter.option pour enregistrer le contenu du DataFrame.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1107 au code de sortie pour vous indiquer que la méthode d’enregistrement n’est pas prise en charge par Snowpark

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

Correction recommandée

Il n’y a pas de correction recommandée pour ce scénario.

Recommandations supplémentaires

SPRKSCL1156

Message : org.apache.spark.sql.functions.degrees a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.degrees, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.degrees, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1156 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction degrees équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1127

Message : org.apache.spark.sql.functions.covar_samp a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.covar_samp, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de fonction org.apache.spark.sql.functions.covar_samp, d’abord utilisée avec des noms de colonne comme arguments, puis avec des objets de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1127 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction covar_samp équivalente qui reçoit deux objets de colonne comme arguments. Pour cette raison, la surcharge Spark qui reçoit deux objets de colonne comme arguments est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit deux arguments de type chaîne, vous pouvez convertir les chaînes en objets de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires

SPRKSCL1113

Message : org.apache.spark.sql.functions.next_day a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.next_day, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.next_day, d’abord utilisée avec une chaîne comme le deuxième argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1113 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction next_day équivalente qui reçoit deux objets de colonne comme arguments. Pour cette raison, la surcharge Spark qui reçoit deux objets de colonne comme arguments est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un objet de colonne et une chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.lit comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1002

Message : Cette section de code a récupéré des erreurs d’analyse _ statement __

Catégorie : Erreur d’analyse.

Description

Ce problème apparaît lorsque l’outil SMA détecte une instruction qui ne peut pas être lue ou comprise correctement dans le code d’un fichier, il s’agit d’une erreur d’analyse. Toutefois, l’outil SMA peut sortir de cette erreur d’analyse et continuer à analyser le code du fichier. Dans ce cas, SMA est en mesure de traiter le code du fichier sans erreur.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de code Scala non valide d’où l’outil SMA peut sortir.

Class myClass {

    def function1() & = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1002 au code de sortie pour vous indiquer que le code du fichier comporte des erreurs d’analyse, mais que SMA peut sortir de cette erreur et poursuivre l’analyse du code du fichier.

class myClass {

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

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

Correction recommandée

Puisque le message identifie l’erreur dans l’instruction, vous pouvez essayer d’identifier la syntaxe non valide et de la supprimer ou de commenter l’instruction pour éviter l’erreur d’analyse.

Class myClass {

    def function1() = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy
Class myClass {

    // def function1() & = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

Recommandations supplémentaires

SPRKSCL1142

Message : l’élément Spark n’est pas défini.

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque l’outil SMA n’a pas pu déterminer un statut de mappage approprié pour l’élément donné. Cela signifie que SMA ne sait pas encore si cet élément est pris en charge ou non par Snowpark. Veuillez noter qu’il s’agit d’un code d’erreur générique utilisé par SMA pour tout élément non défini.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de fonction pour laquelle SMA n’a pas pu déterminer un statut de mappage approprié et a, par conséquent, généré cet EWI. Dans ce cas, vous devez supposer que notDefinedFunction() est une fonction Spark valide et que le code s’exécute.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1142 au code de sortie pour vous indiquer que cet élément n’est pas défini.

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

Correction recommandée

Pour tenter d’identifier le problème, vous pouvez effectuer les validations suivantes :

  • Vérifiez s’il s’agit d’un élément Spark valide.

  • Vérifiez que la syntaxe de l’élément est correcte et qu’il est correctement orthographié.

  • Vérifiez que vous utilisez une version de Spark prise en charge par SMA.

S’il s’agit d’un élément Spark valide, veuillez signaler que vous avez rencontré une erreur de conversion sur cet élément particulier en utilisant l’option Signaler un problème de l’outil SMA et incluez toute information supplémentaire que vous jugez utile.

Veuillez noter que si un élément n’est pas défini par SMA, cela ne signifie pas nécessairement qu’il n’est pas pris en charge par Snowpark. Vous devez consulter la documentation de Snowpark pour vérifier qu’un élément équivalent existe.

Recommandations supplémentaires

SPRKSCL1152

Message : org.apache.spark.sql.functions.variance a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.variance, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.variance, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1152 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction variance équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1103

Ce code de problème est maintenant obsolète.

Message : La méthode SparkBuilder n’est pas prise en charge _ nom de la méthode _

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque le SMA détecte une méthode qui n’est pas prise en charge par Snowflake dans le chaînage de méthodes SparkBuilder. Par conséquent, cela pourrait affecter la migration de l’instruction du lecteur.

Les méthodes suivantes ne sont pas des méthodes SparkBuilder prises en charge :

  • master

  • appName

  • enableHiveSupport

  • withExtensions

Scénario

Entrée

Vous trouverez ci-dessous un exemple de chaînage de méthodes SparkBuilder dont de nombreuses méthodes ne sont pas prises en charge par Snowflake.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1103 au code de sortie pour vous indiquer que les méthodes master, appName et enableHiveSupport ne sont pas prises en charge par Snowpark. Par conséquent, cela pourrait affecter la migration de l’instruction de la session Spark.

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

Correction recommandée

Pour créer la session, il est exigé d’ajouter la configuration Snowflake Snowpark appropriée.

Dans cet exemple, une variable configs est utilisée.

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

Il est également recommandé d’utiliser un fichier de configuration (profile.properties) contenant les informations relatives à la connexion :

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

Et avec le fichier de configuration Session.builder.configFile, la session peut être créée :

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

Recommandations supplémentaires

SPRKSCL1137

Message : org.apache.spark.sql.functions.sin a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.sin, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.sin, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1137 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction sin équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1166

Note

Ce code de problème est maintenant obsolète.

Messag : org.apache.spark.sql.DataFrameReader.format n’est pas pris en charge.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque org.apache.spark.sql.DataFrameReader.format a un argument qui n’est pas pris en charge par Snowpark.

Scénarios

Il existe plusieurs scénarios en fonction du type de format que vous essayez de charger. Il peut s’agir d’un format pris en charge ou non pris en charge.

Scénario 1

Entrée

L’outil analyse le type de format que vous essayez de charger. Les formats pris en charge sont les suivants :

  • csv

  • json

  • orc

  • parquet

  • text

L’exemple ci-dessous montre comment l’outil transforme la méthode format lorsqu’il transmet une valeur csv.

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

Sortie

L’outil transforme la méthode format en un appel de méthode csv lorsque la fonction de chargement a un paramètre.

spark.read.csv(path)
Copy

Correction recommandée

Dans ce cas, l’outil n’affiche pas l’EWI, ce qui signifie qu’aucune correction n’est nécessaire.

Scénario 2

Entrée

L’exemple ci-dessous montre comment l’outil transforme la méthode format lorsqu’il transmet une valeur net.snowflake.spark.snowflake.

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

Sortie

L’outil affiche l’EWI SPRKSCL1166 indiquant que la valeur net.snowflake.spark.snowflake n’est pas prise en charge.

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

Correction recommandée

Pour les scénarios non pris en charge, il n’y a pas de correction spécifique puisque cela dépend des fichiers qui tentent d’être lus.

Scénario 3

Entrée

L’exemple ci-dessous montre comment l’outil transforme la méthode format lorsqu’il transmet un fichier csv, mais en utilisant une variable à la place.

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

Sortie

Comme l’outil ne peut pas déterminer la valeur de la variable dans l’environnement d’exécution, il affiche l’EWI SPRKSCL1163 qui indique que la valeur n’est pas prise en charge.

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

Correction recommandée

Pour contourner le problème, vous pouvez vérifier la valeur de la variable et l’ajouter sous forme de chaîne à l’appel format.

Recommandations supplémentaires

SPRKSCL1118

Message : org.apache.spark.sql.functions.trunc a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.trunc, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.trunc qui génère cet EWI.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1118 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Pour contourner le problème, vous pouvez convertir le deuxième argument en un objet de colonne à l’aide de la fonction com.snowflake.snowpark.functions.lit.

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

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

Recommandations supplémentaires

SPRKSCL1149

Message : org.apache.spark.sql.functions.toRadians a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.toRadians, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.toRadians, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1149 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

En guise de solution de contournement, vous pouvez utiliser la fonction radians. Pour la surcharge Spark qui reçoit un argument de type chaîne, vous devez également convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col.

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

Recommandations supplémentaires

SPRKSCL1159

Message : org.apache.spark.sql.functions.stddev_samp a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.stddev_samp, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.stddev_samp qui génère cet EWI. Dans cet exemple, la fonction stddev_samp est utilisée pour calculer l’écart type de l’échantillon de la colonne sélectionnée.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1159 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction stddev_samp équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1108

Note

Ce code de problème est maintenant obsolète.

Messag : org.apache.spark.sql.DataFrameReader.format n’est pas pris en charge.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque org.apache.spark.sql.DataFrameReader.format a un argument qui n’est pas pris en charge par Snowpark.

Scénarios

Il existe plusieurs scénarios en fonction du type de format que vous essayez de charger. Il peut s’agir d’un format pris en charge ou non pris en charge.

Scénario 1

Entrée

L’outil analyse le type de format que vous essayez de charger. Les formats pris en charge sont les suivants :

  • csv

  • json

  • orc

  • parquet

  • text

L’exemple ci-dessous montre comment l’outil transforme la méthode format lorsqu’il transmet une valeur csv.

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

Sortie

L’outil transforme la méthode format en un appel de méthode csv lorsque la fonction de chargement a un paramètre.

spark.read.csv(path)
Copy

Correction recommandée

Dans ce cas, l’outil n’affiche pas l’EWI, ce qui signifie qu’aucune correction n’est nécessaire.

Scénario 2

Entrée

L’exemple ci-dessous montre comment l’outil transforme la méthode format lorsqu’il transmet une valeur net.snowflake.spark.snowflake.

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

Sortie

L’outil affiche l’EWI SPRKSCL1108 indiquant que la valeur net.snowflake.spark.snowflake n’est pas prise en charge.

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

Correction recommandée

Pour les scénarios non pris en charge, il n’y a pas de correction spécifique puisque cela dépend des fichiers qui tentent d’être lus.

Scénario 3

Entrée

L’exemple ci-dessous montre comment l’outil transforme la méthode format lorsqu’il transmet un fichier csv, mais en utilisant une variable à la place.

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

Sortie

Comme l’outil ne peut pas déterminer la valeur de la variable dans l’environnement d’exécution, il affiche l’EWI SPRKSCL1163 qui indique que la valeur n’est pas prise en charge.

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

Correction recommandée

Pour contourner le problème, vous pouvez vérifier la valeur de la variable et l’ajouter sous forme de chaîne à l’appel format.

Recommandations supplémentaires

SPRKSCL1128

Message : org.apache.spark.sql.functions.exp a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.exp, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.exp, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1128 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction exp équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1169

Message : _ Spark element _ est manquant dans le chaînage de méthodes.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte qu’il manque un appel d’élément Spark dans le chaînage de méthodes. SMA doit connaître cet élément Spark pour analyser l’instruction.

Scénario

Entrée

Vous trouverez ci-dessous un exemple où il manque un appel de fonction de chargement dans le chaînage de méthodes.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1169 au code de sortie pour vous indiquer que l’appel de fonction de chargement est manquant dans le chaînage de méthodes et que SMA ne peut pas analyser l’instruction.

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

Correction recommandée

Veillez à ce que tous les appels de fonction du chaînage de méthodes se trouvent dans la même instruction.

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

Recommandations supplémentaires

SPRKSCL1138

Message : org.apache.spark.sql.functions.sinh a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.sinh, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.sinh, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1138 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction sinh équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1129

Message : org.apache.spark.sql.functions.floor a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.floor, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.floor, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne et enfin avec deux objets de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1129 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction floor équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

Pour la surcharge qui reçoit un objet de colonne et une échelle, vous pouvez utiliser la fonction callBuiltin pour appeler la fonction intégrée Snowflake FLOOR. Pour l’utiliser, vous devez transférer la chaîne « floor » comme premier argument, la colonne comme deuxième argument et l’échelle comme troisième argument.

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

Recommandations supplémentaires

SPRKSCL1168

Message : l”élément Spark avec la ou les valeurs d’argument(s) arguments donnés n’est pas pris en charge.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte que l’élément Spark avec les paramètres donnés n’est pas pris en charge.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’élément Spark dont le paramètre n’est pas pris en charge.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1168 au code de sortie pour vous indiquer que l’élément Spark avec le paramètre donné n’est pas pris en charge.

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

Correction recommandée

Il n’existe pas de correction spécifique pour ce scénario.

Recommandations supplémentaires

SPRKSCL1139

Message : org.apache.spark.sql.functions.sqrt a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.sqrt, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.sqrt, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1139 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction sqrt équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1119

Message : org.apache.spark.sql.Column.endsWith a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.Column.endsWith, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.Column.endsWith, d’abord utilisée avec un argument de chaîne litérale, puis avec un argument d’objet de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1119 au code de sortie pour vous indiquer que cette fonction n’est pas directement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Pour contourner le problème, vous pouvez utiliser la fonction com.snowflake.snowpark.functions.endswith, dont le premier argument est la colonne dont les valeurs seront vérifiées et le second, le suffixe à vérifier par rapport aux valeurs de la colonne. Veuillez noter que si l’argument de la fonction endswith de Spark est une chaîne littérale, vous devez la convertir en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.lit.

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

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

Recommandations supplémentaires

SPRKSCL1148

Message : org.apache.spark.sql.functions.toDegrees a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.toDegrees, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.toDegrees, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1148 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

En guise de solution de contournement, vous pouvez utiliser la fonction degrees. Pour la surcharge Spark qui reçoit un argument de type chaîne, vous devez également convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col.

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

Recommandations supplémentaires

SPRKSCL1158

Message : org.apache.spark.sql.functions.skewness a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.skewness, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.skewness qui génère cet EWI. Dans cet exemple, la fonction skewness est utilisée pour calculer l’asymétrie de la colonne sélectionnée.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1158 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction skew équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1109

Note

Ce code de problème est maintenant obsolète.

Message : Le paramètre n’est pas défini pour org.apache.spark.sql.DataFrameReader.option

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte que le paramètre de org.apache.spark.sql.DataFrameReader.option n’est pas défini.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de paramètre non défini pour la fonction org.apache.spark.sql.DataFrameReader.option.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1109 au code de sortie pour vous indiquer que le paramètre sur la fonction org.apache.spark.sql.DataFrameReader.option n’est pas défini.

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

Correction recommandée

Consultez la documentation de Snowpark relative à l’option de format du lecteur ici, afin d’identifier les options définies.

Recommandations supplémentaires

SPRKSCL1114

Message : org.apache.spark.sql.functions.repeat a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.repeat, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.repeat qui génère cet EWI.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1114 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Pour contourner le problème, vous pouvez convertir le deuxième argument en un objet de colonne à l’aide de la fonction com.snowflake.snowpark.functions.lit.

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

Recommandations supplémentaires

SPRKSCL1145

Message : org.apache.spark.sql.functions.sumDistinct a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.sumDistinct, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.sumDistinct, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1145 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

En guise de solution de contournement, vous pouvez utiliser la fonction sum_distinct. Pour la surcharge Spark qui reçoit un argument de type chaîne, vous devez également convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col.

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

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

Recommandations supplémentaires

SPRKSCL1171

Message : Snowpark ne prend pas en charge les fonctions de fractionnement avec plus de deux paramètres ou contenant un modèle regex. Consultez la documentation pour plus d’informations.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte que org.apache.spark.sql.functions.split a plus de deux paramètres ou contient un modèle regex.

Scénarios

La fonction split est utilisée pour séparer la colonne donnée autour des correspondances du modèle donné. Cette fonction Spark a trois surcharges.

Scénario 1

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.split qui génère cet EWI. Dans cet exemple, la fonction split a deux paramètres et le deuxième argument est une chaîne, et non un modèle regex.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1171 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark

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

Correction recommandée

Snowpark dispose d’une fonction split équivalente qui reçoit un objet de colonne comme deuxième argument. Pour cette raison, la surcharge Spark qui reçoit un argument de chaîne dans le deuxième argument, mais qui n’est pas un modèle regex, peut convertir la chaîne en objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.lit comme solution de contournement.

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

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.split qui génère cet EWI. Dans cet exemple, la fonction split a deux paramètres et le deuxième argument est un modèle regex.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1171 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark car les modèles Regex ne sont pas pris en charge par Snowflake.

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

Correction recommandée

Étant donné que Snowflake ne prend pas en charge les modèles regex, essayez de remplacer le modèle par une chaîne de modèle non regex.

Scénario 3

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.split qui génère cet EWI. Dans cet exemple, la fonction split a plus de deux paramètres.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1171 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark car Snowflake ne dispose pas d’une fonction de fractionnement avec plus de deux paramètres.

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

Correction recommandée

Étant donné que Snowflake ne prend pas en charge la fonction de fractionnement avec plus de deux paramètres, essayez d’utiliser la fonction de fractionnement prise en charge par Snowflake.

Recommandations supplémentaires

SPRKSCL1120

Message : org.apache.spark.sql.functions.asin a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.asin, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.asin, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1120 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction asin équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1130

Message : org.apache.spark.sql.functions.greatest a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.greatest, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.greatest, d’abord utilisée avec plusieurs noms de colonnes comme arguments, puis avec plusieurs objets de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1130 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction greatest équivalente qui reçoit plusieurs objets de colonne comme arguments. Pour cette raison, la surcharge Spark qui reçoit des objets de colonne comme arguments est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit plusieurs arguments de type chaîne, vous pouvez convertir les chaînes en objets de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires


description : >- Snowpark et Snowpark Extensions n’ont pas été ajoutés au fichier de configuration du projet.


SPRKSCL1161

Message : L’ajout de dépendances a échoué.

Catégorie : Erreur de conversion

Description

Ce problème survient lorsque SMA détecte une version Spark dans le fichier de configuration du projet qui n’est pas prise en charge par SMA. Par conséquent, SMA n’a pas pu ajouter les dépendances Snowpark et Snowpark Extensions au fichier de configuration du projet correspondant. Si les dépendances de Snowpark ne sont pas ajoutées, le code migré ne sera pas compilé.

Scénarios

Il y a trois scénarios possibles : sbt, gradle et pom.xml. L’outil SMA tente de traiter le fichier de configuration du projet en supprimant les dépendances Spark et en ajoutant les dépendances Snowpark et Snowpark Extensions.

Scénario 1

Entrée

Vous trouverez ci-dessous un exemple de la section dépendances d’un fichier de configuration du projet sbt.

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

Sortie

SMA ajoute l’EWI SPRKSCL1161 à l’inventaire des problèmes car la version Spark n’est pas prise en charge et conserve la même sortie.

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

Correction recommandée

Supprimez manuellement les dépendances Spark et ajoutez les dépendances Snowpark et Snowpark Extensions au fichier de configuration du projet sbt.

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

Veillez à utiliser la version de Snowpark qui répond le mieux aux exigences de votre projet.

Scénario 2

Entrée

Vous trouverez ci-dessous un exemple de la section dépendances d’un fichier de configuration du projet gradle.

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

Sortie

SMA ajoute l’EWI SPRKSCL1161 à l’inventaire des problèmes car la version Spark n’est pas prise en charge et conserve la même sortie.

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

Correction recommandée

Supprimez manuellement les dépendances Spark et ajoutez les dépendances Snowpark et Snowpark Extensions au fichier de configuration du projet gradle.

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

Assurez-vous que la version des dépendances correspond aux besoins de votre projet.

Scénario 3

Entrée

Vous trouverez ci-dessous un exemple de la section dépendances d’un fichier de configuration du projet pom.xml.

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

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

Sortie

SMA ajoute l’EWI SPRKSCL1161 à l’inventaire des problèmes car la version Spark n’est pas prise en charge et conserve la même sortie.

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

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

Correction recommandée

Supprimez manuellement les dépendances Spark et ajoutez les dépendances Snowpark et Snowpark Extensions au fichier de configuration du projet gradle.

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

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

Assurez-vous que la version des dépendances correspond aux besoins de votre projet.

Recommandations supplémentaires

  • Assurez-vous que l’entrée dispose d’un fichier de configuration du projet :

    • build.sbt

    • build.gradle

    • pom.xml

  • La version de Spark prise en charge par SMA est 2.12:3.1.2

  • Vous pouvez consulter la dernière version de Snowpark ici.

  • Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.

SPRKSCL1155

Avertissement

Ce code de problème est obsolète depuis Spark Conversion Core Version 4.3.2

Message : org.apache.spark.sql.functions.countDistinct a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.countDistinct, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de fonction org.apache.spark.sql.functions.countDistinct, d’abord utilisée avec des noms de colonne comme arguments, puis avec des objets de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1155 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

En guise de solution de contournement, vous pouvez utiliser la fonction count_distinct. Pour la surcharge Spark qui reçoit des arguments de type chaîne, vous devez également convertir les chaînes en un objets de colonne en utilisant la fonction com.snowflake.snowpark.functions.col.

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

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

Recommandations supplémentaires

SPRKSCL1104

Ce code de problème est maintenant obsolète.

Message : L’option du constructeur de la session Spark n’est pas prise en charge.

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction org.apache.spark.sql.SparkSession.Builder.config, qui définit une option de la session Spark et qui n’est pas prise en charge par Snowpark.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.SparkSession.Builder.config pour définir une option dans la session Spark.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1104 au code de sortie pour vous indiquer que la méthode de configuration n’est pas prise en charge par Snowpark Dans ce cas, il n’est pas possible de définir des paramètres dans la session Spark via la fonction de configuration et cela pourrait affecter la migration de l’instruction de la session Spark.

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

Correction recommandée

Pour créer la session, il est exigé d’ajouter la configuration Snowflake Snowpark appropriée.

Dans cet exemple, une variable configs est utilisée.

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

Il est également recommandé d’utiliser un fichier de configuration (profile.properties) contenant les informations relatives à la connexion :

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

Et avec le fichier de configuration Session.builder.configFile, la session peut être créée :

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

Recommandations supplémentaires

SPRKSCL1124

Message : org.apache.spark.sql.functions.cosh a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.cosh, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.cosh, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1124 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction cosh équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1175

Message : La fonction à deux paramètresudf n’est pas prise en charge dans Snowpark. Elle doit être convertie en fonction à paramètre unique udf. Veuillez consulter la documentation pour savoir comment modifier manuellement le code pour qu’il fonctionne dans Snowpark.

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.udf à deux paramètres dans le code source, car Snowpark n’a pas de fonction udf à deux paramètres équivalente. Le code de sortie pourrait alors ne pas être compilé.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.udf qui génère cet EWI. Dans cet exemple, la fonction udf a deux paramètres.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1175 au code de sortie pour vous indiquer que la fonction udf n’est pas prise en charge, car elle a deux paramètres.

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

Correction recommandée

Snowpark prend en charge uniquement la fonction udf à paramètre unique (sans le paramètre de type retour). Vous devez donc convertir votre fonction udf à deux paramètres en fonction udf à paramètre unique pour qu’elle fonctionne dans Snowpark.

Par exemple, pour l’exemple de code mentionné ci-dessus, vous devrez le convertir manuellement en ceci :

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

Veuillez noter que la création de la fonction udf dans Snowpark comporte certaines mises en garde qui peuvent nécessiter des modifications manuelles supplémentaires de votre code. Veuillez consulter les autres recommandations ici relatives à la création de fonctions udf à paramètre unique dans Snowpark pour plus de détails.

Recommandations supplémentaires

SPRKSCL1001

Message : Cette section de code contient des erreurs d’analyse. L’erreur d’analyse a été trouvée à : la ligne _ line number _, la colonne _ column number _. Lors de la tentative d’analyse de _ statement _. Ce fichier n’a pas été converti, il devrait donc encore contenir des références à Spark API.

Catégorie : Erreur d’analyse.

Description

Ce problème apparaît lorsque l’outil SMA détecte une instruction qui ne peut pas être lue ou comprise correctement dans le code d’un fichier, il s’agit d’une erreur d’analyse. En outre, ce problème apparaît lorsqu’un fichier présente une ou plusieurs erreurs d’analyse.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de code Scala non valide.

/#/(%$"$%

Class myClass {

    def function1() = { 1 }

}
Copy

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1001 au code de sortie pour vous indiquer que le code du fichier comporte des erreurs d’analyse. Par conséquent, SMA n’est pas en mesure de traiter un fichier présentant cette erreur.

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

Class myClass {

    def function1() = { 1 }

}
Copy

Correction recommandée

Puisque le message identifie l’erreur dans l’instruction, vous pouvez essayer d’identifier la syntaxe non valide et de la supprimer ou de commenter l’instruction pour éviter l’erreur d’analyse.

Class myClass {

    def function1() = { 1 }

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

Class myClass {

    def function1() = { 1 }

}
Copy

Recommandations supplémentaires

SPRKSCL1141

Message : org.apache.spark.sql.functions.stddev_pop a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.stddev_pop, qui dispose d’une solution de contournement.

Scénario

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.stddev_pop, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

Entrée

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1141 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction stddev_pop équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires

SPRKSCL1110

Note

Ce code de problème est maintenant obsolète.

Message : La méthode du lecteur n’est pas prise en charge _ method name _.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque le SMA détecte une méthode qui n’est pas prise en charge par Snowflake dans le chaînage de méthodes DataFrameReader. Par conséquent, cela pourrait affecter la migration de l’instruction du lecteur.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de chaînage de méthodes DataFrameReader dont la méthode de chargement n’est pas prise en charge par Snowflake.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1110 au code de sortie pour vous indiquer que la méthode de chargement n’est pas prise en charge par Snowpark Par conséquent, cela pourrait affecter la migration de l’instruction du lecteur.

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

Correction recommandée

Consultez la documentation de Snowpark relative au lecteur ici, afin de connaitre les méthodes prises en charge par Snowflake.

Recommandations supplémentaires

SPRKSCL1100

Ce code de problème est obsolète depuis Spark Conversion Core 2.3.22

Message : La répartition n’est pas prise en charge.

Catégorie : Erreur d’analyse.

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction org.apache.spark.sql.DataFrame.repartition, qui n’est pas prise en charge par Snowpark. Snowflake gère le stockage et la charge de travail sur les clusters, ce qui rend l’opération de répartition inapplicable.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.DataFrame.repartition pour retourner un nouveau DataFrame partitionné par les expressions de partitionnement données.

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

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

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

    val dfRepartitionByNumber = dfJob.repartition(3)

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

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1100 au code de sortie pour vous indiquer que cette fonction n’est pas prise en charge par Snowpark

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

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

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

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

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

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

Correction recommandée

Snowflake gère le stockage et la charge de travail sur les clusters, ce qui rend l’opération de répartition inapplicable. Cela signifie que l’utilisation de la répartition avant la jointure n’est pas du tout requise.

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

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

    val dfRepartitionByExpresion = dfName

    val dfRepartitionByNumber = dfJob

    val dfRepartitionByBoth = dfAge

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

Recommandations supplémentaires

SPRKSCL1151

Message : org.apache.spark.sql.functions.var_samp a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.var_samp, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.var_samp, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1151 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction var_samp équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires


description : >- Le format du lecteur sur le chaînage des méthodes DataFrameReader n’est pas l’un de ceux définis par Snowpark.


SPRKSCL1165

Message : Le format du lecteur sur DataFrameReader ne peut pas être défini

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte que le format du lecteur dans le chaînage de méthodes DataFrameReader n’est pas l’un des suivants pris en charge par Snowpark : avro, csv, json, orc, parquet et xml. Par conséquent, l’outil SMA ne peut pas déterminer si les options sont définies ou non.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de chaînage de méthodes DataFrameReader où SMA peut déterminer le format du lecteur.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1165 au code de sortie pour vous indiquer que le format du lecteur ne peut pas être déterminé dans DataFrameReader.

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

Correction recommandée

Consultez la documentation de Snowpark ici pour obtenir plus d’informations sur le format du lecteur.

Recommandations supplémentaires

SPRKSCL1134

Message : org.apache.spark.sql.functions.tanh a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.log, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.log qui génère cet EWI.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1134 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Vous trouverez ci-dessous les différentes solutions de contournement pour toutes les surcharges de la fonction log.

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

Vous pouvez convertir la base en objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.lit et convertir le nom de la colonne en objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col.

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

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

Vous pouvez convertir la base en objet de colonne à l’aide de la fonction com.snowflake.snowpark.functions.lit.

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

3.def log(columnName: String) : Colonne

Vous pouvez transférer lit(Math.E) comme premier argument et convertir le nom de la colonne en objet colonne en utilisant la fonction com.snowflake.snowpark.functions.col et le transférer comme deuxième argument.

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

4. def log(e: Column) : Colonne

Vous pouvez transférer lit(Math.E) comme premier argument et l’objet de colonne comme deuxième argument.

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

Recommandations supplémentaires

SPRKSCL1125

Avertissement

Ce code de problème est obsolète depuis Spark Conversion Core 2.9.0

Message : org.apache.spark.sql.functions.count a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.count, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.count, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1125 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction count équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires

SPRKSCL1174

Message : La fonction udf à paramètre unique est prise en charge dans Snowpark, mais elle peut nécessiter une intervention manuelle. Veuillez consulter la documentation pour savoir comment modifier manuellement le code pour qu’il fonctionne dans Snowpark.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction à paramètre unique org.apache.spark.sql.functions.udf dans le code. Dans ce cas, une intervention manuelle peut s’avérer nécessaire.

Snowpark API fournit une fonction com.snowflake.snowpark.functions.udf équivalente qui vous permet de créer une fonction définie par l’utilisateur à partir d’une fonction lambda ou d’une fonction dans Scala. Cependant, la création de la fonction udf dans Snowpark comporte certaines mises en garde qui pourraient vous obliger à apporter quelques modifications manuelles à votre code pour qu’il fonctionne correctement.

Scénarios

La fonction udf Snowpark devrait fonctionner comme prévu dans un grand nombre de cas sans nécessiter d’intervention manuelle. Cependant, dans certains cas, vous devrez modifier manuellement votre code pour qu’il fonctionne dans Snowpark. Certains de ces scénarios sont listés ci-dessous :

Scénario 1

Entrée

Vous trouverez ci-dessous un exemple de création d’UDFs dans un objet avec l’App Trait.

L”App Trait de Scala simplifie la création de programmes exécutables en fournissant une méthode main qui exécute automatiquement le code dans la définition de l’objet. L’extension de l”App retarde l’initialisation des champs jusqu’à l’exécution de la méthode main, ce qui peut affecter les définitions d’UDFs si elles s’appuient sur des champs initialisés. Cela signifie que si un objet étend l”App et que l”udf fait référence à un champ de l’objet, la définition de l”udf téléchargée vers Snowflake n’inclura pas la valeur initialisée du champ. Cela peut entraîner le retour de valeurs null par l”udf.

Par exemple, dans le code suivant, la variable myValue deviendra null dans la définition de l”udf :

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1174 au code de sortie pour vous indiquer que la fonction udf à paramètre unique est prise en charge dans Snowpark, mais qu’une intervention manuelle est requise.

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

Correction recommandée

Pour éviter ce problème, il est recommandé de ne pas étendre l”App et d’implémenter une méthode main distincte pour votre code. Cela permet de s’assurer que les champs de l’objet sont initialisés avant que les définitions udf ne soient créées et téléchargées vers Snowflake.

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

Pour plus de détails à ce sujet, consultez la rubrique Mise en garde concernant la création d’UDFs dans un objet avec l’App Trait.

Scénario 2

Entrée

Vous trouverez ci-dessous un exemple de création d’UDFs dans les notebooks Jupyter.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1174 au code de sortie pour vous indiquer que la fonction udf à paramètre unique est prise en charge dans Snowpark, mais qu’une intervention manuelle est requise.

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

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

Correction recommandée

Pour créer un udf dans un notebook Jupyter, vous devez définir l’implémentation de votre fonction dans une classe qui étend la capacité Sérialisable. Par exemple, vous devez le convertir manuellement en ceci :

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

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

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

Pour plus de détails sur la façon de créer des UDFs dans les notebooks Jupyter, voir Création d’UDFs dans des notebooks Jupyter.

Recommandations supplémentaires

SPRKSCL1000

Message : La version spark-core du projet source est _ version number _, la version spark-core prise en charge par Snowpark est 2.12:3.1.2. Il peut donc y avoir des différences de fonctionnalité entre les mappages existants.

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte une version de spark-core qui n’est pas prise en charge par SMA. Par conséquent, il peut y avoir des différences fonctionnelles entre les mappages existants et la sortie peut avoir des comportements inattendus.

Recommandations supplémentaires

  • La version spark-core prise en charge par SMA est 2.12:3.1.2. Envisagez de changer la version de votre code source.

  • Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.

SPRKSCL1140

Message : org.apache.spark.sql.functions.stddev a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.stddev, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.stddev, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1140 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

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

Correction recommandée

Snowpark dispose d’une fonction stddev équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

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

Recommandations supplémentaires

SPRKSCL1111

Note

Ce code de problème est maintenant obsolète.

Message : CreateDecimalType n’est pas pris en charge.

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction org.apache.spark.sql.types.DataTypes.CreateDecimalType.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.types.DataTypes.CreateDecimalType.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1111 au code de sortie pour vous indiquer que la fonction CreateDecimalType n’est pas prise en charge par Snowpark

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

Correction recommandée

Il n’y a pas encore de correction recommandée.

Message : L’option du constructeur de la session Spark n’est pas prise en charge.

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction org.apache.spark.sql.SparkSession.Builder.config, qui définit une option de la session Spark et qui n’est pas prise en charge par Snowpark.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.SparkSession.Builder.config pour définir une option dans la session Spark.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1104 au code de sortie pour vous indiquer que la méthode de configuration n’est pas prise en charge par Snowpark Dans ce cas, il n’est pas possible de définir des paramètres dans la session Spark via la fonction de configuration et cela pourrait affecter la migration de l’instruction de la session Spark.

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

Correction recommandée

Pour créer la session, il est exigé d’ajouter la configuration Snowflake Snowpark appropriée.

Dans cet exemple, une variable configs est utilisée.

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

Il est également recommandé d’utiliser un fichier de configuration (profile.properties) contenant les informations relatives à la connexion :

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

Et avec le fichier de configuration Session.builder.configFile, la session peut être créée :

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

Recommandations supplémentaires

SPRKSCL1101

Ce code de problème est obsolète depuis Spark Conversion Core 2.3.22

Message : La diffusion n’est pas prise en charge

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.broadcast, qui n’est pas prise en charge par Snowpark. Cette fonction n’est pas prise en charge car Snowflake ne prend pas en charge les variables de diffusion.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.broadcast pour créer un objet de diffusion à utiliser sur chaque cluster Spark :

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

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

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

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1101 au code de sortie pour vous indiquer que cette fonction n’est pas prise en charge par Snowpark

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

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

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

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

Correction recommandée

Snowflake gère le stockage et la charge de travail sur les clusters, ce qui rend les objets de diffusion inapplicables. Cela signifie que le recours à la diffusion peut ne pas être nécessaire du tout, mais chaque cas doit faire l’objet d’une analyse plus approfondie.

L’approche recommandée consiste à remplacer une diffusion du dataframe Spark par un dataframe classique Snowpark ou par l’utilisation d’une méthode de dataframe comme Jointure.

Pour l’entrée proposée, la correction consiste à adapter la jointure pour utiliser directement le dataframe collegeDF sans avoir recours à la diffusion pour le dataframe.

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

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

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

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

Recommandations supplémentaires

SPRKSCL1150

Message : org.apache.spark.sql.functions.var_pop a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.var_pop, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.var_pop, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

val df = Seq(
  ("A", 10.0),
  ("A", 20.0),
  ("A", 30.0),
  ("B", 40.0),
  ("B", 50.0),
  ("B", 60.0)
).toDF("group", "value")

val result1 = df.groupBy("group").agg(var_pop("value"))
val result2 = df.groupBy("group").agg(var_pop(col("value")))
Copy

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1150 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

val df = Seq(
  ("A", 10.0),
  ("A", 20.0),
  ("A", 30.0),
  ("B", 40.0),
  ("B", 50.0),
  ("B", 60.0)
).toDF("group", "value")

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

Correction recommandée

Snowpark dispose d’une fonction var_pop équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

val df = Seq(
  ("A", 10.0),
  ("A", 20.0),
  ("A", 30.0),
  ("B", 40.0),
  ("B", 50.0),
  ("B", 60.0)
).toDF("group", "value")

val result1 = df.groupBy("group").agg(var_pop(col("value")))
val result2 = df.groupBy("group").agg(var_pop(col("value")))
Copy

Recommandations supplémentaires


description : >- Le paramètre de la fonction org.apache.spark.sql.DataFrameReader.option n’est pas défini.


SPRKSCL1164

Note

Ce code de problème est maintenant obsolète.

Message : Le paramètre n’est pas défini pour org.apache.spark.sql.DataFrameReader.option

Catégorie : Avertissement

Description

Ce problème apparaît lorsque SMA détecte que le paramètre de org.apache.spark.sql.DataFrameReader.option n’est pas défini.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de paramètre non défini pour la fonction org.apache.spark.sql.DataFrameReader.option.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1164 au code de sortie pour vous indiquer que le paramètre sur la fonction org.apache.spark.sql.DataFrameReader.option n’est pas défini.

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

Correction recommandée

Consultez la documentation de Snowpark relative à l’option de format du lecteur ici, afin d’identifier les options définies.

Recommandations supplémentaires

SPRKSCL1135

Avertissement

Ce code de problème est obsolète depuis Spark Conversion Core 4.3.2

Message : org.apache.spark.sql.functions.mean a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.mean, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.mean, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1135 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction mean équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1115

Avertissement

Ce code de problème est obsolète depuis Spark Conversion Core Version 4.6.0

Message : org.apache.spark.sql.functions.round a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.round, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.round qui génère cet EWI.

val df = Seq(3.9876, 5.673, 8.1234).toDF("value")
val result1 = df.withColumn("rounded_value", round(col("value")))
val result2 = df.withColumn("rounded_value", round(col("value"), 2))
Copy

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1115 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

val df = Seq(3.9876, 5.673, 8.1234).toDF("value")
/*EWI: SPRKSCL1115 => org.apache.spark.sql.functions.round has a workaround, see documentation for more info*/
val result1 = df.withColumn("rounded_value", round(col("value")))
/*EWI: SPRKSCL1115 => org.apache.spark.sql.functions.round has a workaround, see documentation for more info*/
val result2 = df.withColumn("rounded_value", round(col("value"), 2))
Copy

Correction recommandée

Snowpark dispose d’une fonction round équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un objet de colonne et une échelle, vous pouvez convertir l’échelle en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.lit comme solution de contournement.

val df = Seq(3.9876, 5.673, 8.1234).toDF("value")
val result1 = df.withColumn("rounded_value", round(col("value")))
val result2 = df.withColumn("rounded_value", round(col("value"), lit(2)))
Copy

Recommandations supplémentaires

SPRKSCL1144

Message : La table des symboles n’a pas pu être chargée

Catégorie : Erreur d’analyse

Description

Ce problème apparaît en cas d’erreur critique dans le processus d’exécution de SMA. La table des symboles ne pouvant être chargée, l’outil SMA ne peut pas lancer le processus d’évaluation ou de conversion.

Recommandations supplémentaires

  • Il est peu probable qu’il s’agisse d’une erreur dans le code source lui-même, mais plutôt d’une erreur dans la manière dont SMA traite le code source. La meilleure configuration serait de signaler un problème dans SMA.

  • Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.

SPRKSCL1170

Note

Ce code de problème est maintenant obsolète.

Message : la clé membre de sparkConfig n’est pas prise en charge par la clé spécifique à la plateforme.

Catégorie : Erreur de conversion

Description

Si vous utilisez une version plus ancienne, veuillez la mettre à jour.

Recommandations supplémentaires

SPRKSCL1121

Message : org.apache.spark.sql.functions.atan a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.atan, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.atan, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

val df = Seq(1.0, 0.5, -1.0).toDF("value")
val result1 = df.withColumn("atan_value", atan("value"))
val result2 = df.withColumn("atan_value", atan(col("value")))
Copy

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1121 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction atan équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

val df = Seq(1.0, 0.5, -1.0).toDF("value")
val result1 = df.withColumn("atan_value", atan(col("value")))
val result2 = df.withColumn("atan_value", atan(col("value")))
Copy

Recommandations supplémentaires

SPRKSCL1131

Message : org.apache.spark.sql.functions.grouping a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.grouping, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.grouping, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne.

val df = Seq(("Alice", 2), ("Bob", 5)).toDF("name", "age")
val result1 = df.cube("name").agg(grouping("name"), sum("age"))
val result2 = df.cube("name").agg(grouping(col("name")), sum("age"))
Copy

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1131 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

val df = Seq(("Alice", 2), ("Bob", 5)).toDF("name", "age")
/*EWI: SPRKSCL1131 => org.apache.spark.sql.functions.grouping has a workaround, see documentation for more info*/
val result1 = df.cube("name").agg(grouping("name"), sum("age"))
/*EWI: SPRKSCL1131 => org.apache.spark.sql.functions.grouping has a workaround, see documentation for more info*/
val result2 = df.cube("name").agg(grouping(col("name")), sum("age"))
Copy

Correction recommandée

Snowpark dispose d’une fonction grouping équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

val df = Seq(("Alice", 2), ("Bob", 5)).toDF("name", "age")
val result1 = df.cube("name").agg(grouping(col("name")), sum("age"))
val result2 = df.cube("name").agg(grouping(col("name")), sum("age"))
Copy

Recommandations supplémentaires

SPRKSCL1160

Note

Ce code de problème est obsolète depuis Spark Conversion Core 4.1.0

Message : org.apache.spark.sql.functions.sum a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.sum, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple d’utilisation de la fonction org.apache.spark.sql.functions.sum qui génère cet EWI. Dans cet exemple, la fonction sum est utilisée pour calculer la somme de la colonne sélectionnée.

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

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1160 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

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

Correction recommandée

Snowpark dispose d’une fonction sum équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

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

Recommandations supplémentaires

SPRKSCL1154

Message : org.apache.spark.sql.functions.ceil a une solution de contournement. Voir la documentation pour plus d’informations

Catégorie : Avertissement

Description

Ce problème apparaît lorsque l’outil SMA détecte une utilisation de la fonction org.apache.spark.sql.functions.ceil, qui dispose d’une solution de contournement.

Scénario

Entrée

Vous trouverez ci-dessous un exemple de la fonction org.apache.spark.sql.functions.ceil, d’abord utilisée avec un nom de colonne comme argument, puis avec un objet de colonne et enfin avec un objet de colonne.

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
val result1 = df.withColumn("ceil", ceil("value"))
val result2 = df.withColumn("ceil", ceil(col("value")))
val result3 = df.withColumn("ceil", ceil(col("value"), lit(1)))
Copy

Sortie

L’outil SMA ajoute l’EWI SPRKSCL1154 au code de sortie pour vous indiquer que cette fonction n’est pas entièrement prise en charge par Snowpark, mais qu’il existe une solution de contournement.

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result1 = df.withColumn("ceil", ceil("value"))
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result2 = df.withColumn("ceil", ceil(col("value")))
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result3 = df.withColumn("ceil", ceil(col("value"), lit(1)))
Copy

Correction recommandée

Snowpark dispose d’une fonction ceil équivalente qui reçoit un objet de colonne comme argument. Pour cette raison, la surcharge Spark qui reçoit un objet de colonne comme argument est directement prise en charge par Snowpark et ne nécessite aucun changement.

Pour la surcharge qui reçoit un argument de type chaîne, vous pouvez convertir la chaîne en un objet de colonne en utilisant la fonction com.snowflake.snowpark.functions.col comme solution de contournement.

Pour la surcharge qui reçoit un objet de colonne et une échelle, vous pouvez utiliser la fonction callBuiltin pour appeler la fonction intégrée Snowflake CEIL. Pour l’utiliser, vous devez transférer la chaîne « ceil » comme premier argument, la colonne comme deuxième argument et l’échelle comme troisième argument.

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
val result1 = df.withColumn("ceil", ceil(col("value")))
val result2 = df.withColumn("ceil", ceil(col("value")))
val result3 = df.withColumn("ceil", callBuiltin("ceil", col("value"), lit(1)))
Copy

Recommandations supplémentaires

SPRKSCL1105

Ce code de problème est maintenant obsolète.

Message : La valeur du format du rédacteur n’est pas prise en charge.

Catégorie : Erreur de conversion

Description

Ce problème apparaît lorsque org.apache.spark.sql.DataFrameWriter.format a un argument qui n’est pas pris en charge par Snowpark.

Scénarios

Il existe plusieurs scénarios en fonction du type de format que vous essayez d’enregistrer. Il peut s’agir d’un format pris en charge ou non pris en charge.

Scénario 1

Entrée

L’outil analyse le type de format que vous essayez d’enregistrer. Les formats pris en charge sont les suivants :

  • csv

  • json

  • orc

  • parquet

  • text

    dfWrite.write.format("csv").save(path)
Copy

Sortie

L’outil transforme la méthode format en un appel de méthode csv lorsque la fonction d’enregistrement a un paramètre.

    dfWrite.write.csv(path)
Copy

Correction recommandée

Dans ce cas, l’outil n’affiche pas l’EWI, ce qui signifie qu’aucune correction n’est nécessaire.

Scénario 2

Entrée

L’exemple ci-dessous montre comment l’outil transforme la méthode format lorsqu’il transmet une valeur net.snowflake.spark.snowflake.

dfWrite.write.format("net.snowflake.spark.snowflake").save(path)
Copy

Sortie

L’outil affiche l’EWI SPRKSCL1105 indiquant que la valeur net.snowflake.spark.snowflake n’est pas prise en charge.

/*EWI: SPRKSCL1105 => Writer format value is not supported .format("net.snowflake.spark.snowflake")*/
dfWrite.write.format("net.snowflake.spark.snowflake").save(path)
Copy

Correction recommandée

Pour les scénarios non pris en charge, il n’y a pas de correction spécifique puisque cela dépend des fichiers qui tentent d’être lus.

Scénario 3

Entrée

L’exemple ci-dessous montre comment l’outil transforme la méthode format lorsqu’il transmet un fichier csv, mais en utilisant une variable à la place.

val myFormat = "csv"
dfWrite.write.format(myFormat).save(path)
Copy

Sortie

Comme l’outil ne peut pas déterminer la valeur de la variable dans l’environnement d’exécution, il affiche l’EWI SPRKSCL1163 qui indique que la valeur n’est pas prise en charge.

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

Correction recommandée

Pour contourner le problème, vous pouvez vérifier la valeur de la variable et l’ajouter sous forme de chaîne à l’appel format.

Recommandations supplémentaires