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"))
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"))
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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
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
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¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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¶
Inclure un fichier de projet de configuration dans le dossier d’entrée.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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))
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))
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
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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()")
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()")
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¶
Vous trouverez plus d’informations sur le code intégré SQL 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.
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)
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)
Correction recommandée
Assurez-vous que la valeur de la variable est valide afin d’éviter des comportements inattendus.
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)*/
Correction recommandée
Il n’y a pas de correction recommandée pour ce scénario.
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")
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")
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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"))
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"))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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)
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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()
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()*/
Correction recommandée
Il n’y a pas de correction recommandée pour ce scénario.
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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"))
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"))
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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 }
}
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 }
}
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 }
}
Class myClass {
// def function1() & = { 1 }
def function2() = { 2 }
def function3() = { 3 }
}
Recommandations supplémentaires¶
Vérifiez que le code du fichier est un code Scala valide.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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()
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()
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¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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()
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
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
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>
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
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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)
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)
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)
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)
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¶
L’emplacement Snowpark n’accepte que les emplacements Cloud utilisant une zone de préparation Snowflake.
La documentation des méthodes prises en charge par Snowpark se trouve dans la documentation.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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"))
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"))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")
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")
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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)
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)
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)
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)
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¶
L’emplacement Snowpark n’accepte que les emplacements Cloud utilisant une zone de préparation Snowflake.
La documentation des méthodes prises en charge par Snowpark se trouve dans la documentation.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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)
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)))
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)))
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)))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
Correction recommandée
Il n’existe pas de correction spécifique pour ce scénario.
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")
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")
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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))
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))
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)))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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"))
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"))
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")))
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])"))
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])"))
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))
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))
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¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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"))
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"))
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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"
...
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"
...
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"
...
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'
...
}
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'
...
}
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'
...
}
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>
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>
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>
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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()
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()
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
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>
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
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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())
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¶
Pour en savoir plus sur la création de fonctions définies par l’utilisateur dans Snowpark, veuillez vous référer à la documentation suivante : Création de fonctions définies par l’utilisateur (UDFs) pour DataFrames dans Scala
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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 }
}
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 }
}
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 }
}
// /#/(%$"$%
Class myClass {
def function1() = { 1 }
}
Recommandations supplémentaires¶
Vérifiez que le code du fichier est un code Scala valide.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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()
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()*/
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¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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)
Recommandations supplémentaires¶
Le guide de l’architecture de Snowflake fournit des informations sur la gestion du stockage de Snowflake.
La référence du Dataframe Snowpark peut être utile pour adapter un scénario particulier sans répartition.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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()
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()
Correction recommandée
Consultez la documentation de Snowpark ici pour obtenir plus d’informations sur le format du lecteur.
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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"))
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"))
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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
...
}
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
...
}
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)
}
...
}
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()
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()
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()
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¶
Pour en savoir plus sur la création de fonctions définies par l’utilisateur dans Snowpark, veuillez vous référer à la documentation suivante : Création de fonctions définies par l’utilisateur (UDFs) pour DataFrames dans Scala
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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()
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()
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
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>
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
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")
)
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")
)
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()
Recommandations supplémentaires¶
Le guide de l’architecture de Snowflake fournit des informations sur la gestion du stockage de Snowflake.
La référence du dataframe Snowpark peut être utile pour adapter un scénario de diffusion particulier.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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))
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))
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)))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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¶
Mettez votre application à jour vers la dernière version.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")))
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")))
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")))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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"))
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"))
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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")
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")
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"))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)))
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)))
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)))
Recommandations supplémentaires¶
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.
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)
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)
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)
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)
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)
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)
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¶
L’emplacement Snowpark n’accepte que les emplacements Cloud utilisant une zone de préparation Snowflake.
La documentation des méthodes prises en charge par Snowpark se trouve dans la documentation.
Pour plus d’assistance, vous pouvez nous envoyer un e-mail à sma-support@snowflake.com ou signaler un problème dans l’outil SMA.