Snowpark Migration Accelerator: Códigos de problema para Spark - Scala

SPRKSCL1126

Mensagem: org.apache.spark.sql.functions.covar_pop tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.covar_pop, que tem uma solução alternativa.

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.covar_pop, usada primeiro com nomes de coluna como argumentos e depois com objetos de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1126 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente covar_pop que recebe dois objetos de coluna como argumentos. Por esse motivo, a sobrecarga do Spark que recebe dois objetos de coluna como argumentos é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe dois argumentos de cadeia de caracteres, você pode converter as cadeias de caracteres em objetos de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais

SPRKSCL1112

Mensagem: _ spark element _ is not supported

Categoria: Erro de conversão

Descrição

Esse problema aparece quando o SMA detecta o uso de um elemento Spark que não é compatível com o Snowpark e que não tem seu próprio código de erro associado a ele. Esse é um código de erro genérico usado pelo SMA para qualquer elemento Spark sem suporte.

Cenário

Entrada

Abaixo está um exemplo de um elemento Spark que não é compatível com o Snowpark e, portanto, gera este EWI.

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

Saída

O SMA adiciona o EWI SPRKSCL1112 ao código de saída para que você saiba que esse elemento não é compatível com o Snowpark.

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

Correção recomendada

Como esse é um código de erro genérico que se aplica a uma série de funções sem suporte, não há uma correção única e específica. A ação apropriada dependerá do elemento específico em uso.

Observe que, mesmo que o elemento não seja compatível, isso não significa necessariamente que não seja possível encontrar uma solução ou solução alternativa. Isso significa apenas que o próprio SMA não consegue encontrar a solução.

Recomendações adicionais

SPRKSCL1143

Mensagem: Ocorreu um erro ao carregar a tabela de símbolos

Categoria: Erro de conversão

Descrição

Esse problema aparece quando há um erro ao carregar os símbolos da tabela de símbolos do SMA. A tabela de símbolos faz parte da arquitetura subjacente do SMA, permitindo conversões mais complexas.

Recomendações adicionais

  • É improvável que isso seja um erro no próprio código-fonte, mas sim um erro na forma como o SMA processa o código-fonte. A melhor solução seria publicar um problema no SMA.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1153

Aviso

Esse código de problema está obsoleto desde o Spark Conversion Core Version 4.3.2

Mensagem: org.apache.spark.sql.functions.max tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.max, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.max, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1153 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente max que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1102

Esse código de problema está obsoleto desde o Spark Conversion Core 2.3.22

Mensagem: Explode não é suportado

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.explode, que não é compatível com o Snowpark.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.explode usada para obter as informações consolidadas dos campos de matriz do conjunto de dados.

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

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

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

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

Saída

O SMA adiciona o EWI SPRKSCL1102 ao código de saída para que você saiba que essa função não é suportada no Snowpark.

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

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

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

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

Correção recomendada

Como o explode não é compatível com o Snowpark, a função flatten pode ser usada como substituta.

A correção a seguir cria o achatamento do dataframe dfExplode e, em seguida, faz a consulta para replicar o resultado no Spark.

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

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

    val rddExplode = session.sparkContext.parallelize(explodeData)

    val dfExplode = session.createDataFrame(rddExplode, explodeSchema)

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

Recomendações adicionais

SPRKSCL1136

Aviso

Esse código de problema está obsoleto desde o Spark Conversion Core 4.3.2

Mensagem: org.apache.spark.sql.functions.min tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.min, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.min, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1136 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente min que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1167

Mensagem: Arquivo de projeto não encontrado na pasta de entrada

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta que a pasta de entrada não tem nenhum arquivo de configuração de projeto. Os arquivos de configuração de projeto compatíveis com o SMA são os seguintes:

  • build.sbt

  • build.gradle

  • pom.xml

Recomendações adicionais

  • Inclua um arquivo de projeto de configuração na pasta de entrada.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1147

Mensagem: org.apache.spark.sql.functions.tanh tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.tanh, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.tanh, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1147 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente tanh que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1116

Aviso

Esse código de problema está obsoleto desde o Spark Conversion Core Version 2.40.1

Mensagem: org.apache.spark.sql.functions.split tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.split, que tem uma solução alternativa.

Cenário

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.functions.split que gera esse EWI.

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

Saída

O SMA adiciona o EWI SPRKSCL1116 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

Para a sobrecarga do Spark que recebe dois argumentos, você pode converter o segundo argumento em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit como uma solução alternativa.

A sobrecarga que recebe três argumentos ainda não é compatível com o Snowpark e não há solução alternativa.

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

Recomendações adicionais

SPRKSCL1122

Mensagem: org.apache.spark.sql.functions.corr tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.corr, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.corr, usada primeiro com nomes de coluna como argumentos e depois com objetos de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1122 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente corr que recebe dois objetos de coluna como argumentos. Por esse motivo, a sobrecarga do Spark que recebe objetos de coluna como argumentos é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe dois argumentos de cadeia de caracteres, você pode converter as cadeias de caracteres em objetos de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais

SPRKSCL1173

Mensagem: o código SQL incorporado não pode ser processado.

Categoria: Aviso.

Descrição

Esse problema aparece quando o SMA detecta um código SQL incorporado que não pode ser processado. Então, o código SQL incorporado não pode ser convertido para o Snowflake.

Cenário

Entrada

Abaixo está um exemplo de um código SQL incorporado que não pode ser processado.

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

Saída

O SMA adiciona o EWI SPRKSCL1173 ao código de saída para informar que o código SQL incorporado não pode ser processado.

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

Correção recomendada

Certifique-se de que o código SQL incorporado seja uma cadeia de caracteres sem interpolações, variáveis ou concatenações de cadeia de caracteres.

Recomendações adicionais

SPRKSCL1163

Mensagem: O elemento não é um literal e não pode ser avaliado.

Categoria: Erro de conversão.

Descrição

Esse problema ocorre quando o elemento de processamento atual não é um literal e, portanto, não pode ser avaliado pelo SMA.

Cenário

Entrada

Veja a seguir um exemplo de quando o elemento a ser processado não é um literal e não pode ser avaliado pelo SMA.

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

Saída

O SMA adiciona o EWI SPRKSCL1163 ao código de saída para que você saiba que o parâmetro format_type não é um literal e não pode ser avaliado pelo SMA.

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

Correção recomendada

  • Certifique-se de que o valor da variável seja válido para evitar comportamentos inesperados.

Recomendações adicionais

SPRKSCL1132

Mensagem: org.apache.spark.sql.functions.grouping_id tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.grouping_id, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.grouping_id, usada primeiro com o nome de várias colunas como argumentos e depois com objetos de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1132 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente grouping_id que recebe vários objetos de coluna como argumentos. Por esse motivo, a sobrecarga do Spark que recebe vários objetos de coluna como argumentos é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe vários argumentos de cadeia de caracteres, você pode converter as cadeias de caracteres em objetos de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais

SPRKSCL1106

Aviso

Este código de problema está obsoleto

Mensagem: A opção Writer não é suportada.

Categoria: Erro de conversão.

Descrição

Esse problema aparece quando a ferramenta detecta, na instrução writer, o uso de uma opção não suportada pelo Snowpark.

Cenário

Entrada

Abaixo está um exemplo do org.apache.spark.sql.DataFrameWriter.option usado para adicionar opções a uma instrução writer.

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

Saída

O SMA adiciona o EWI SPRKSCL1106 ao código de saída para que você saiba que o método option não é compatível com o Snowpark.

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

Correção recomendada

Não há nenhuma correção recomendada para esse cenário

Recomendações adicionais

SPRKSCL1157

Mensagem: org.apache.spark.sql.functions.kurtosis tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.kurtosis, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.kurtosis que gera essa EWI. Neste exemplo, a função kurtosis é usada para calcular a curtose da coluna selecionada.

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

Saída

O SMA adiciona o EWI SPRKSCL1157 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente kurtosis que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1146

Mensagem: org.apache.spark.sql.functions.tan tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.tan, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.tan, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1146 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente tan que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1117

Aviso

Esse código de problema está obsoleto desde o Spark Conversion Core 2.40.1

Mensagem: org.apache.spark.sql.functions.translate tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.translate, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.translate que gera este EWI. Neste exemplo, a função translate é usada para substituir os caracteres “a”, “e” e “o” em cada palavra por “1”, “2” e “3”, respectivamente.

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

Saída

O SMA adiciona o EWI SPRKSCL1117 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

Como solução alternativa, você pode converter o segundo e o terceiro argumentos em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit.

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

Recomendações adicionais

SPRKSCL1123

Mensagem: org.apache.spark.sql.functions.cos tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.cos, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.cos, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1123 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente cos que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1172

Mensagem: O Snowpark não oferece suporte a StructFiled com parâmetro de metadados.

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta que org.apache.spark.sql.types.StructField.apply com org.apache.spark.sql.types.Metadata como parâmetro. Isso ocorre porque o Snowpark não oferece suporte ao parâmetro de metadados.

Cenário

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.types.StructField.apply que gera este EWI. Neste exemplo, a função apply é usada para gerar uma instância de StructField.

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

Saída

O SMA adiciona o EWI SPRKSCL1172 ao código de saída para que você saiba que o parâmetro de metadados não é compatível com o Snowflake.

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

Correção recomendada

O Snowpark tem uma função equivalente com.snowflake.snowpark.types.StructField.apply que recebe três parâmetros. Então, como solução alternativa, você pode tentar remover o argumento de metadados.

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

Recomendações adicionais

SPRKSCL1162

Nota

Este código de problema está obsoleto

Mensagem: Ocorreu um erro ao extrair os arquivos dbc.

Categoria: Aviso.

Descrição

Esse problema aparece quando um arquivo dbc não pode ser extraído. Esse aviso pode ser causado por um ou mais dos seguintes motivos: muito pesado, inacessível, somente leitura, etc.

Recomendações adicionais

  • Como solução alternativa, você pode verificar o tamanho do arquivo se ele for muito pesado para ser processado. Além disso, analise se a ferramenta pode acessá-la para evitar problemas de acesso.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1133

Mensagem: org.apache.spark.sql.functions.least tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.least, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.least, usada primeiro com o nome de várias colunas como argumentos e depois com objetos de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1133 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente least que recebe vários objetos de coluna como argumentos. Por esse motivo, a sobrecarga do Spark que recebe vários objetos de coluna como argumentos é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe vários argumentos de cadeia de caracteres, você pode converter as cadeias de caracteres em objetos de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1107

Aviso

Este código de problema está obsoleto

Mensagem: Não há suporte para salvar Write.

Categoria: Erro de conversão.

Descrição

Esse problema aparece quando a ferramenta detecta, na instrução writer, o uso de um método para salvar writer que não é compatível com o Snowpark.

Cenário

Entrada

Abaixo está um exemplo do org.apache.spark.sql.DataFrameWriter.save usado para salvar o conteúdo de DataFrame.

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

Saída

O SMA adiciona o EWI SPRKSCL1107 ao código de saída para que você saiba que o método de salvamento não é compatível com o Snowpark.

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

Correção recomendada

Não há nenhuma correção recomendada para esse cenário

Recomendações adicionais

SPRKSCL1156

Mensagem: org.apache.spark.sql.functions.degrees tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.degrees, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.degrees, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1156 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente degrees que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1127

Mensagem: org.apache.spark.sql.functions.covar_samp tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.covar_samp, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.covar_samp, usada primeiro com nomes de colunas como argumentos e depois com objetos de colunas.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1127 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente covar_samp que recebe dois objetos de coluna como argumentos. Por esse motivo, a sobrecarga do Spark que recebe dois objetos de coluna como argumentos é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe dois argumentos de cadeia de caracteres, você pode converter as cadeias de caracteres em objetos de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais

SPRKSCL1113

Mensagem: org.apache.spark.sql.functions.next_day tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.next_day, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.next_day, usada primeiro com uma cadeia de caracteres como segundo argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1113 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente next_day que recebe dois objetos de coluna como argumentos. Por esse motivo, a sobrecarga do Spark que recebe dois objetos de coluna como argumentos é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um objeto de coluna e uma cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit como solução alternativa.

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

Recomendações adicionais

SPRKSCL1002

Mensagem: Esta seção de código tem recuperação de erros de análise _ instrução _

Categoria: Erro de análise.

Descrição

Esse problema aparece quando o SMA detecta alguma instrução que não pode ser lida ou compreendida corretamente no código de um arquivo, o que é chamado de erro de análise, mas o SMA pode se recuperar desse erro de análise e continuar analisando o código do arquivo. Nesse caso, o SMA consegue processar o código do arquivo sem erros.

Cenário

Entrada

Abaixo está um exemplo de código Scala inválido em que o SMA pode se recuperar.

Class myClass {

    def function1() & = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

Saída

O SMA adiciona o EWI SPRKSCL1002 ao código de saída para que você saiba que o código do arquivo tem erros de análise, mas o SMA pode se recuperar desse erro e continuar analisando o código do arquivo.

class myClass {

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

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

Correção recomendada

Como a mensagem aponta o erro na instrução, você pode tentar identificar a sintaxe inválida e removê-la ou comentar essa instrução para evitar o erro de análise.

Class myClass {

    def function1() = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy
Class myClass {

    // def function1() & = { 1 }

    def function2() = { 2 }

    def function3() = { 3 }

}
Copy

Recomendações adicionais

  • Verifique se o código do arquivo é um código Scala válido.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1142

Mensagem: _ spark element _ não está definido

Categoria: Erro de conversão

Descrição

Esse problema aparece quando o SMA não consegue determinar um status de mapeamento apropriado para um determinado elemento. Isso significa que o SMA ainda não sabe se esse elemento é compatível ou não com o Snowpark. Observe que esse é um código de erro genérico usado pelo SMA para qualquer elemento não definido.

Cenário

Entrada

Abaixo está um exemplo de uma função para a qual o SMA não conseguiu determinar um status de mapeamento apropriado e, portanto, gerou este EWI. Nesse caso, presuma que notDefinedFunction() é uma função Spark válida e o código é executado.

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

Saída

O SMA adiciona o EWI SPRKSCL1142 ao código de saída para informar que esse elemento não está definido.

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

Correção recomendada

Para tentar identificar o problema, você pode realizar as seguintes validações:

  • Verifique se é um elemento Spark válido.

  • Verifique se o elemento tem a sintaxe correta e se está escrito corretamente.

  • Verifique se está usando uma versão do Spark compatível com o SMA.

Se esse for um elemento válido do Spark, informe que encontrou um erro de conversão nesse elemento específico usando a opção de Relatar um prolema do SMA e inclua qualquer informação adicional que considere útil.

Observe que, se um elemento não for definido pelo SMA, isso não significa necessariamente que ele não seja compatível com o Snowpark. Consulte a documentação do Snowpark para verificar se existe um elemento equivalente.

Recomendações adicionais

SPRKSCL1152

Mensagem: org.apache.spark.sql.functions.variance tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.variance, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.variance, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1152 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente variance que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1103

Este código de problema está obsoleto

Mensagem: O método SparkBuilder não é suportado _ method name _

Categoria: Erro de conversão

Descrição

Esse problema aparece quando o SMA detecta um método que não é compatível com o Snowflake no encadeamento de métodos do SparkBuilder. Portanto, isso pode afetar a migração da instrução reader.

A seguir, estão os métodos SparkBuilder não suportados:

  • master

  • appName

  • enableHiveSupport

  • withExtensions

Cenário

Entrada

Abaixo está um exemplo de um encadeamento de métodos SparkBuilder com muitos métodos que não são compatíveis com o Snowflake.

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

Saída

O SMA adiciona o EWI SPRKSCL1103 ao código de saída para que você saiba que os métodos master, appName e enableHiveSupport não são compatíveis com o Snowpark. Então, isso pode afetar a migração da instrução Spark Session.

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

Correção recomendada

Para criar a sessão, é necessário adicionar a configuração adequada do Snowflake Snowpark.

Neste exemplo, é usada uma variável configs.

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

Também é recomendado o uso de um configFile (profile.properties) com as informações de conexão:

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

E com o Session.builder.configFile, a sessão pode ser criada:

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

Recomendações adicionais

SPRKSCL1137

Mensagem: org.apache.spark.sql.functions.sin tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.sin, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.sin, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1137 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente sin que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1166

Nota

Este código de problema está obsoleto

Mensagem: org.apache.spark.sql.DataFrameReader.format não é compatível.

Categoria: Aviso.

Descrição

Esse problema aparece quando o comando org.apache.spark.sql.DataFrameReader.format tem um argumento que não é suportado pelo Snowpark.

Cenários

Há alguns cenários, dependendo do tipo de formato que você está tentando carregar. Pode ser um formato suportado ou não suportado.

Cenário 1

Entrada

A ferramenta analisa o tipo de formato que está tentando carregar; os formatos compatíveis são:

  • csv

  • json

  • orc

  • parquet

  • texto

O exemplo abaixo mostra como a ferramenta transforma o método format ao passar um valor csv.

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

Saída

A ferramenta transforma o método format em uma chamada de método csv quando a função load tem um parâmetro.

spark.read.csv(path)
Copy

Correção recomendada

Nesse caso, a ferramenta não mostra o EWI, o que significa que não há necessidade de correção.

Cenário 2

Entrada

O exemplo abaixo mostra como a ferramenta transforma o método format ao passar um valor net.snowflake.spark.snowflake.

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

Saída

A ferramenta mostra o EWI SPRKSCL1166 indicando que o valor net.snowflake.spark.snowflake não é suportado.

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

Correção recomendada

Para os cenários não suportados não há nenhuma correção específica, pois depende dos arquivos que estão tentando ser lidos.

Cenário 3

Entrada

O exemplo abaixo mostra como a ferramenta transforma o método format ao passar um csv, mas usando uma variável.

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

Saída

Como a ferramenta não consegue determinar o valor da variável em tempo de execução, mostra o EWI SPRKSCL1163 indicando que o valor não é suportado.

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

Correção recomendada

Como solução alternativa, você pode verificar o valor da variável e adicioná-lo como uma cadeia de caracteres à chamada format.

Recomendações adicionais

SPRKSCL1118

Mensagem: org.apache.spark.sql.functions.trunc tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.trunc, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.trunc que gera esse EWI.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1118 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

Como solução alternativa, você pode converter o segundo argumento em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit.

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

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

Recomendações adicionais

SPRKSCL1149

Mensagem: org.apache.spark.sql.functions.toRadians tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.toRadians, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.toRadians, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1149 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

Como solução alternativa, o senhor pode usar a função radians. Para a sobrecarga do Spark que recebe um argumento de cadeia de caracteres, você também precisa converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col.

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

Recomendações adicionais

SPRKSCL1159

Mensagem: org.apache.spark.sql.functions.stddev_samp tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.stddev_samp, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.stddev_samp que gera esse EWI. Neste exemplo, a função stddev_samp é usada para calcular o desvio padrão de amostra da coluna selecionada.

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

Saída

O SMA adiciona o EWI SPRKSCL1159 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente stddev_samp que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1108

Nota

Este código de problema está obsoleto.

Mensagem: org.apache.spark.sql.DataFrameReader.format não é compatível.

Categoria: Aviso.

Descrição

Esse problema aparece quando o comando org.apache.spark.sql.DataFrameReader.format tem um argumento que não é suportado pelo Snowpark.

Cenários

Há alguns cenários, dependendo do tipo de formato que você está tentando carregar. Pode ser um formato suportado ou não suportado.

Cenário 1

Entrada

A ferramenta analisa o tipo de formato que está tentando carregar; os formatos compatíveis são:

  • csv

  • json

  • orc

  • parquet

  • texto

O exemplo abaixo mostra como a ferramenta transforma o método format ao passar um valor csv.

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

Saída

A ferramenta transforma o método format em uma chamada de método csv quando a função load tem um parâmetro.

spark.read.csv(path)
Copy

Correção recomendada

Nesse caso, a ferramenta não mostra o EWI, o que significa que não há necessidade de correção.

Cenário 2

Entrada

O exemplo abaixo mostra como a ferramenta transforma o método format ao passar um valor net.snowflake.spark.snowflake.

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

Saída

A ferramenta mostra o EWI SPRKSCL1108 indicando que o valor net.snowflake.spark.snowflake não é suportado.

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

Correção recomendada

Para os cenários não suportados não há nenhuma correção específica, pois depende dos arquivos que estão tentando ser lidos.

Cenário 3

Entrada

O exemplo abaixo mostra como a ferramenta transforma o método format ao passar um csv, mas usando uma variável.

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

Saída

Como a ferramenta não consegue determinar o valor da variável em tempo de execução, mostra o EWI SPRKSCL1163 indicando que o valor não é suportado.

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

Correção recomendada

Como solução alternativa, você pode verificar o valor da variável e adicioná-lo como uma cadeia de caracteres à chamada format.

Recomendações adicionais

SPRKSCL1128

Mensagem: org.apache.spark.sql.functions.exp tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.exp, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.exp, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1128 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente exp que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1169

Mensagem: _ Spark element _ está faltando no método de encadeamento.

Categoria: Aviso.

Descrição

Esse problema aparece quando o SMA detecta que está faltando uma chamada de elemento Spark no encadeamento do método. O SMA precisa conhecer esse elemento Spark para analisar a instrução.

Cenário

Entrada

Abaixo está um exemplo em que a chamada de função de carregamento está ausente no encadeamento de métodos.

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

Saída

O SMA adiciona o EWI SPRKSCL1169 ao código de saída para que você saiba que falta uma chamada de função de carregamento no encadeamento do método e que o SMA não pode analisar a instrução.

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

Correção recomendada

Certifique-se de que todas as chamadas de função do encadeamento de métodos estejam na mesma instrução.

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

Recomendações adicionais

SPRKSCL1138

Mensagem: org.apache.spark.sql.functions.sinh tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.sinh, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.sinh, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1138 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente sinh que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1129

Mensagem: org.apache.spark.sql.functions.floor tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.floor, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.floor, usada primeiro com um nome de coluna como argumento, depois com um objeto de coluna e, finalmente, com dois objetos de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1129 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente floor que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

Para a sobrecarga que recebe um objeto de coluna e uma escala, você pode usar a função callBuiltin para invocar a função interna do Snowflake FLOOR. Para usá-la, você deve passar a cadeia de caracteres «floor» como o primeiro argumento, a coluna como o segundo argumento e a escala como o terceiro argumento.

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

Recomendações adicionais

SPRKSCL1168

Mensagem: _ elemento Spark _ com valor(es) de argumento _ argumentos dados _ não é suportada.

Categoria: Aviso.

Descrição

Esse problema aparece quando o SMA detecta que o elemento Spark com os parâmetros fornecidos não é compatível.

Cenário

Entrada

Abaixo está um exemplo de elemento Spark cujo parâmetro não é suportado.

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

Saída

O SMA adiciona o EWI SPRKSCL1168 ao código de saída para informar que o elemento Spark com o parâmetro fornecido não é compatível.

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

Correção recomendada

Para esse cenário, não há uma correção específica.

Recomendações adicionais

SPRKSCL1139

Mensagem: org.apache.spark.sql.functions.sqrt tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.sqrt, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.sqrt, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1139 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente sqrt que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1119

Mensagem: org.apache.spark.sql.Column.endsWith tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.Column.endsWith, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.Column.endsWith, usada primeiro com um argumento de cadeia de caracteres literal e depois com um argumento de objeto de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1119 ao código de saída para que você saiba que essa função não é diretamente compatível com o Snowpark, mas tem uma solução alternativa.

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

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

Correção recomendada

Como solução alternativa, você pode usar a função com.snowflake.snowpark.functions.endswith, em que o primeiro argumento seria a coluna cujos valores serão verificados e o segundo argumento seria o sufixo a ser verificado em relação aos valores da coluna. Observe que, se o argumento da função endswith do Spark for uma cadeia de caracteres literal, você deverá convertê-la em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit.

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

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

Recomendações adicionais

SPRKSCL1148

Mensagem: org.apache.spark.sql.functions.toDegrees tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.toDegrees, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.toDegrees, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1148 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

Como solução alternativa, você pode usar a função degrees. Para a sobrecarga do Spark que recebe um argumento de cadeia de caracteres, você também precisa converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col.

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

Recomendações adicionais

SPRKSCL1158

Mensagem: org.apache.spark.sql.functions.skewness tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.skewness, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.skewness que gera esse EWI. Neste exemplo, a função skewness é usada para calcular a assimetria da coluna selecionada.

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

Saída

O SMA adiciona o EWI SPRKSCL1158 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente skew que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1109

Nota

Este código de problema está obsoleto

Mensagem: O parâmetro não está definido para org.apache.spark.sql.DataFrameReader.option

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta que o parâmetro de org.apache.spark.sql.DataFrameReader.option não está definido.

Cenário

Entrada

Abaixo está um exemplo de parâmetro indefinido para a função org.apache.spark.sql.DataFrameReader.option.

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

Saída

O SMA adiciona o EWI SPRKSCL1109 ao código de saída para que você saiba que o parâmetro fornecido para a função org.apache.spark.sql.DataFrameReader.option não está definido.

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

Correção recomendada

Verifique a documentação do Snowpark para a opção de formato de reader aqui, a fim de identificar as opções definidas.

Recomendações adicionais

SPRKSCL1114

Mensagem: org.apache.spark.sql.functions.repeat tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.repeat, que tem uma solução alternativa.

Cenário

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.functions.repeat que gera esse EWI.

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

Saída

O SMA adiciona o EWI SPRKSCL1114 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

Como solução alternativa, você pode converter o segundo argumento em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit.

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

Recomendações adicionais

SPRKSCL1145

Mensagem: org.apache.spark.sql.functions.sumDistinct tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.sumDistinct, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.sumDistinct, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1145 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

Como solução alternativa, o senhor pode usar a função sum_distinct. Para a sobrecarga do Spark que recebe um argumento de cadeia de caracteres, você também precisa converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col.

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

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

Recomendações adicionais

SPRKSCL1171

Mensagem: O Snowpark não oferece suporte a funções de divisão com mais de dois parâmetros ou que contenham um padrão regex. Consulte a documentação para obter mais informações.

Categoria: Aviso.

Descrição

Esse problema aparece quando o SMA detecta que org.apache.spark.sql.functions.split tem mais de dois parâmetros ou contém um padrão regex.

Cenários

A função split é usada para separar a coluna fornecida em torno das correspondências do padrão fornecido. Essa função Spark tem três sobrecargas.

Cenário 1

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.functions.split que gera esse EWI. Neste exemplo, a função split tem dois parâmetros e o segundo argumento é uma cadeia de caracteres, não um padrão regex.

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

Saída

O SMA adiciona o EWI SPRKSCL1171 ao código de saída para que você saiba que essa função não é totalmente suportada no Snowpark.

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

Correção recomendada

O Snowpark tem uma função equivalente split que recebe um objeto de coluna como segundo argumento. Por esse motivo, a sobrecarga do Spark que recebe um argumento de cadeia de caracteres no segundo argumento, mas que não é um padrão regex, pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit como uma solução alternativa.

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

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.functions.split que gera esse EWI. Neste exemplo, a função split tem dois parâmetros e o segundo argumento é um padrão regex.

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

Saída

O SMA adiciona o EWI SPRKSCL1171 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark porque os padrões regex não são compatíveis com o Snowflake.

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

Correção recomendada

Como o Snowflake não oferece suporte a padrões regex, tente substituir o padrão por uma cadeia de caracteres de padrão não regex.

Cenário 3

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.functions.split que gera esse EWI. Neste exemplo, a função split tem mais de dois parâmetros.

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

Saída

O SMA adiciona o EWI SPRKSCL1171 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, pois o Snowflake não tem uma função split com mais de dois parâmetros.

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

Correção recomendada

Como o Snowflake não suporta a função split com mais de dois parâmetros, tente usar a função split suportada pelo Snowflake.

Recomendações adicionais

SPRKSCL1120

Mensagem: org.apache.spark.sql.functions.asin tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.asin, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.asin, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1120 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente asin que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1130

Mensagem: org.apache.spark.sql.functions.greatest tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.greatest, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.greatest, usada primeiro com vários nomes de coluna como argumentos e depois com vários objetos de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1130 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente greatest que recebe vários objetos de coluna como argumentos. Por esse motivo, a sobrecarga do Spark que recebe objetos de coluna como argumentos é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe vários argumentos de cadeia de caracteres, você pode converter as cadeias de caracteres em objetos de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais


descrição: >- Snowpark e extensões do Snowpark não foram adicionados ao arquivo de configuração do projeto.


SPRKSCL1161

Mensagem: Falha ao adicionar dependências.

Categoria: Erro de conversão.

Descrição

Esse problema ocorre quando o SMA detecta uma versão do Spark no arquivo de configuração do projeto que não é compatível com o SMA e, portanto, o SMA não pode adicionar as dependências do Snowpark e extensões do Snowpark ao arquivo de configuração do projeto correspondente. Se as dependências do Snowpark não forem adicionadas, o código migrado não será compilado.

Cenários

Há três cenários possíveis: sbt, gradle e pom.xml. O SMA tenta processar o arquivo de configuração do projeto removendo as dependências do Spark e adicionando as dependências do Snowpark e extensões do Snowpark.

Cenário 1

Entrada

Veja a seguir um exemplo da seção dependencies de um arquivo de configuração de projeto sbt.

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

Saída

O SMA adiciona o EWI SPRKSCL1161 ao inventário de problemas, já que a versão do Spark não é compatível, e mantém a mesma saída.

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

Correção recomendada

Manualmente, remova as dependências do Spark e adicione as dependências do Snowpark e extensões do Snowpark ao arquivo de configuração do projeto sbt.

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

Certifique-se de usar a versão do Snowpark que melhor atenda aos requisitos do seu projeto.

Cenário 2

Entrada

Veja a seguir um exemplo da seção dependencies de um arquivo de configuração de projeto gradle.

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

Saída

O SMA adiciona o EWI SPRKSCL1161 ao inventário de problemas, já que a versão do Spark não é compatível, e mantém a mesma saída.

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

Correção recomendada

Manualmente, remova as dependências do Spark e adicione as dependências do Snowpark e extensões do Snowpark ao arquivo de configuração do projeto gradle.

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

Certifique-se de que a versão das dependências esteja de acordo com as necessidades de seu projeto.

Cenário 3

Entrada

Veja a seguir um exemplo da seção dependencies de um arquivo de configuração de projeto pom.xml.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1161 ao inventário de problemas, já que a versão do Spark não é compatível, e mantém a mesma saída.

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

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

Correção recomendada

Manualmente, remova as dependências do Spark e adicione as dependências do Snowpark e extensões do Snowpark ao arquivo de configuração do projeto gradle.

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

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

Certifique-se de que a versão das dependências esteja de acordo com as necessidades de seu projeto.

Recomendações adicionais

  • Certifique-se de que a entrada tenha um arquivo de configuração de projeto:

    • build.sbt

    • build.gradle

    • pom.xml

  • A versão do Spark suportada pelo SMA é 2.12:3.1.2

  • Você pode verificar a versão mais recente do Snowpark aqui.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1155

Aviso

Esse código de problema está obsoleto desde o Spark Conversion Core Version 4.3.2

Mensagem: org.apache.spark.sql.functions.countDistinct tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.countDistinct, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.countDistinct, usada primeiro com nomes de coluna como argumentos e depois com objetos de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1155 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

Como solução alternativa, você pode usar a função count_distinct. Para a sobrecarga do Spark que recebe argumentos de cadeia de caracteres, você também precisa converter as cadeias de caracteres em objetos de coluna usando a função com.snowflake.snowpark.functions.col.

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

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

Recomendações adicionais

SPRKSCL1104

Este código de problema está obsoleto

Mensagem: A opção Spark Session builder não é suportada.

Categoria: Erro de conversão.

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.SparkSession. Builder.config, que está definindo uma opção da Spark Session e não é suportada pelo Snowpark.

Cenário

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.SparkSession.Builder.config usada para definir uma opção na Spark Session.

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

Saída

O SMA adiciona o EWI SPRKSCL1104 ao código de saída para que você saiba que o método de configuração não é compatível com o Snowpark. Então, não é possível definir opções na Spark Session por meio da função config e isso pode afetar a migração da instrução da Spark Session.

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

Correção recomendada

Para criar a sessão, é necessário adicionar a configuração adequada do Snowflake Snowpark.

Neste exemplo, é usada uma variável configs.

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

Também é recomendado o uso de um configFile (profile.properties) com as informações de conexão:

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

E com o Session.builder.configFile, a sessão pode ser criada:

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

Recomendações adicionais

SPRKSCL1124

Mensagem: org.apache.spark.sql.functions.cosh tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.cosh, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.cosh, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1124 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente cosh que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1175

Mensagem: A função de dois parâmetrosudfnão é compatível com o Snowpark. Ela deve ser convertida em uma função de parâmetro únicoudf. Consulte a documentação para saber como modificar manualmente o código para que ele funcione no Snowpark.

Categoria: Erro de conversão.

Descrição

Esse problema aparece quando o SMA detecta o uso da função de dois parâmetros org.apache.spark.sql.functions.udf no código-fonte, porque o Snowpark não tem uma função equivalente de dois parâmetros udf, então o código de saída pode não ser compilado.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.udf que gera esse EWI. Neste exemplo, a função udf tem dois parâmetros.

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

Saída

O SMA adiciona o EWI SPRKSCL1175 ao código de saída para que você saiba que a função udf não é compatível, pois tem dois parâmetros.

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

Correção recomendada

O Snowpark suporta apenas a função de parâmetro único udf (sem o parâmetro de tipo de retorno), portanto, você deve converter sua função de dois parâmetros udf em uma função de parâmetro único udf para que ela funcione no Snowpark.

Por exemplo, para o código de amostra mencionado acima, você teria que convertê-lo manualmente para isso:

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

Observe que há algumas ressalvas sobre a criação do udf no Snowpark que podem exigir que você faça algumas alterações manuais adicionais no seu código. Para obter mais detalhes, consulte estas outras recomendações [aqui](../../issue-codes-by-source/spark-scala/README. md#additional-recommendations) relacionadas à criação de funções de parâmetro único udf no Snowpark.

Recomendações adicionais

SPRKSCL1001

Mensagem: Esta seção de código tem erros de análise. O erro de análise foi encontrado em: linha _ número da linha _, coluna _ número da coluna _. Ao tentar analisar a _ instrução _. Esse arquivo não foi convertido, portanto, espera-se que ele ainda tenha referências ao Spark API.

Categoria: Erro de análise.

Descrição

Esse problema aparece quando o SMA detecta alguma instrução que não pode ser lida ou compreendida corretamente no código de um arquivo, o que é chamado de erro de análise. Além disso, esse problema aparece quando um arquivo tem um ou mais erros de análise.

Cenário

Entrada

Abaixo está um exemplo de código Scala inválido.

/#/(%$"$%

Class myClass {

    def function1() = { 1 }

}
Copy

Saída

O SMA adiciona o EWI SPRKSCL1001 ao código de saída para que você saiba que o código do arquivo tem erros de análise. Portanto, o SMA não é capaz de processar um arquivo com esse erro.

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

Class myClass {

    def function1() = { 1 }

}
Copy

Correção recomendada

Como a mensagem aponta o erro na instrução, você pode tentar identificar a sintaxe inválida e removê-la ou comentar essa instrução para evitar o erro de análise.

Class myClass {

    def function1() = { 1 }

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

Class myClass {

    def function1() = { 1 }

}
Copy

Recomendações adicionais

  • Verifique se o código do arquivo é um código Scala válido.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1141

Mensagem: org.apache.spark.sql.functions.stddev_pop tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.stddev_pop, que tem uma solução alternativa.

Cenário

Abaixo está um exemplo da função org.apache.spark.sql.functions.stddev_pop, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

Entrada

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

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

Saída

O SMA adiciona o EWI SPRKSCL1141 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente stddev_pop que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais

SPRKSCL1110

Nota

Este código de problema está obsoleto

Mensagem: Método de leitura não suportado _ nome do método _.

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta um método que não é compatível com o Snowflake no encadeamento de métodos do DataFrameReader. Então, isso pode afetar a migração da instrução reader.

Cenário

Entrada

Abaixo está um exemplo de um encadeamento de método DataFrameReader em que o método de carregamento não é suportado no Snowflake.

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

Saída

O SMA adiciona o EWI SPRKSCL1110 ao código de saída para que você saiba que o método de carregamento não é suportado no Snowpark. Então, isso pode afetar a migração da instrução reader.

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

Correção recomendada

Consulte a documentação do Snowpark para reader aqui, a fim de conhecer os métodos suportados pelo Snowflake.

Recomendações adicionais

SPRKSCL1100

Esse código de problema está obsoleto desde o Spark Conversion Core 2.3.22

Mensagem: A repartição não é suportada.

Categoria: Erro de análise.

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.DataFrame. repartition, que não é suportada pelo Snowpark. O Snowflake gerencia o armazenamento e a carga de trabalho nos clusters, tornando a operação de repartição inaplicável.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.DataFrame.repartition usada para retornar um novo DataFrame particionado pelas expressões de particionamento fornecidas.

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

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

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

    val dfRepartitionByNumber = dfJob.repartition(3)

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

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

Saída

O SMA adiciona o EWI SPRKSCL1100 ao código de saída para que você saiba que essa função não é suportada no Snowpark.

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

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

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

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

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

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

Correção recomendada

Como o Snowflake gerencia o armazenamento e a carga de trabalho nos clusters, a operação de repartição não é aplicável. Isso significa que o uso da repartição antes da união não é necessário.

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

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

    val dfRepartitionByExpresion = dfName

    val dfRepartitionByNumber = dfJob

    val dfRepartitionByBoth = dfAge

    val joinedDf = dfRepartitionByExpresion.join(dfRepartitionByNumber)
Copy

Recomendações adicionais

SPRKSCL1151

Mensagem: org.apache.spark.sql.functions.var_samp tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.var_samp, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.var_samp, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1151 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente var_samp que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais


descrição: >- O formato de reader no encadeamento do método DataFrameReader não é um dos definidos pelo Snowpark.


SPRKSCL1165

Mensagem: O formato de reader no encadeamento do método DataFrameReader não pode ser definido

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta que o format do reader no encadeamento do método DataFrameReader não é um dos seguintes suportados pelo Snowpark: avro, csv, json, orc, parquet e xml. Portanto, o SMA não pode determinar se as opções de configuração estão definidas ou não.

Cenário

Entrada

Abaixo está um exemplo de encadeamento do método DataFrameReader em que o SMA pode determinar o formato do leitor.

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

Saída

O SMA adiciona o EWI SPRKSCL1165 ao código de saída para que você saiba que o format do reader não pode ser determinado no encadeamento do método DataFrameReader.

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

Correção recomendada

Consulte a documentação do Snowpark aqui para obter mais informações sobre o formato de reader.

Recomendações adicionais

SPRKSCL1134

Mensagem: org.apache.spark.sql.functions.log tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.log, que tem uma solução alternativa.

Cenário

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.functions.log que gera esse EWI.

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

Saída

O SMA adiciona o EWI SPRKSCL1134 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

Abaixo estão as diferentes soluções alternativas para todas as sobrecargas da função log.

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

Você pode converter a base em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit e converter o nome da coluna em um objeto de coluna usando a função com.snowflake.snowpark.functions.col.

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

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

Você pode converter a base em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit.

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

3.def log(columnName: String): Column

Você pode passar lit(Math.E) como o primeiro argumento e converter o nome da coluna em um objeto de coluna usando a função com.snowflake.snowpark.functions.col e passá-lo como o segundo argumento.

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

4. def log(e: Column): Column

Você pode passar lit(Math.E) como o primeiro argumento e o objeto de coluna como o segundo argumento.

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

Recomendações adicionais

SPRKSCL1125

Aviso

Esse código de problema está obsoleto desde o Spark Conversion Core 2.9.0

Mensagem: org.apache.spark.sql.functions.count tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.count, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.count, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1125 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente count que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais

SPRKSCL1174

Mensagem: A função de parâmetro único udf é compatível com o Snowpark, mas pode exigir intervenção manual. Consulte a documentação para saber como modificar manualmente o código para que ele funcione no Snowpark.

Categoria: Aviso.

Descrição

Esse problema aparece quando o SMA detecta o uso da função de parâmetro único org.apache.spark.sql.functions.udf no código. Nesse caso, pode ser necessária uma intervenção manual.

O Snowpark API fornece uma função com.snowflake.snowpark.functions.udf equivalente que permite criar uma função definida pelo usuário a partir de um lambda ou função em Scala; no entanto, há algumas ressalvas sobre a criação de udf no Snowpark que podem exigir que você faça algumas alterações manuais no seu código para que ele funcione corretamente.

Cenários

A função do Snowpark udf deve funcionar como pretendido em uma ampla gama de casos, sem necessidade de intervenção manual. No entanto, há alguns cenários que exigiriam que você modificasse manualmente o código para que ele funcionasse no Snowpark. Alguns desses cenários estão listados abaixo:

Cenário 1

Entrada

Veja a seguir um exemplo de criação de UDFs em um objeto com o App Trait.

A característica App do Scala simplifica a criação de programas executáveis, fornecendo um método main que executa automaticamente o código dentro da definição do objeto. Estender App atrasa a inicialização dos campos até que o método main seja executado, o que pode afetar as definições de UDFs se elas dependerem de campos inicializados. Isso significa que, se um objeto estender App e o udf fizer referência a um campo de objeto, a definição udf carregada no Snowflake não incluirá o valor inicializado do campo. Isso pode resultar em valores null sendo retornados pelo udf.

Por exemplo, no código a seguir, a variável myValue será resolvida para null na definição udf:

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

Saída

O SMA adiciona o EWI SPRKSCL1174 ao código de saída para que você saiba que a função de parâmetro único udf é compatível com o Snowpark, mas requer intervenção manual.

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

Correção recomendada

Para evitar esse problema, é recomendável não estender o App e implementar um método main separado para o seu código. Isso garante que os campos de objeto sejam inicializados antes que as definições de udf sejam criadas e carregadas no Snowflake.

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

Para obter mais detalhes sobre esse tópico, consulte Ressalva sobre criar UDFs em um objeto com o App Trait.

Cenário 2

Entrada

Veja abaixo um exemplo de criação de UDFs no Jupyter Notebooks.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1174 ao código de saída para que você saiba que a função de parâmetro único udf é compatível com o Snowpark, mas requer intervenção manual.

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

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

Correção recomendada

Para criar um udf em um Jupyter Notebook, você deve definir a implementação de sua função em uma classe que estenda Serializable. Por exemplo, você deve convertê-lo manualmente para isso:

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

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

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

Para obter mais detalhes sobre como criar UDFs no Jupyter Notebooks, consulte Criando UDFs no Jupyter Notebooks.

Recomendações adicionais

SPRKSCL1000

Mensagem: A versão do spark-core do projeto de origem é _ número da versão _, a versão do spark-core suportada pelo snowpark é 2.12:3.1.2, portanto, pode haver diferenças funcionais entre os mapeamentos existentes

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta uma versão do spark-core que não é compatível com o SMA. Portanto, pode haver diferenças funcionais entre os mapeamentos existentes e a saída pode ter comportamentos inesperados.

Recomendações adicionais

  • A versão do spark-core suportada pelo SMA é 2.12:3.1.2. Considere a possibilidade de alterar a versão de seu código-fonte.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1140

Mensagem: org.apache.spark.sql.functions.stddev tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.stddev, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.stddev, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1140 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente stddev que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais

SPRKSCL1111

Nota

Este código de problema está obsoleto

Mensagem: CreateDecimalType não é compatível.

Categoria: Erro de conversão.

Descrição

Esse problema aparece quando o SMA detecta um uso da função org.apache.spark.sql.types.DataTypes.CreateDecimalType

Cenário

Entrada

Veja a seguir um exemplo de uso da função org.apache.spark.sql.types.DataTypes.CreateDecimalType.

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

Saída

O SMA adiciona o EWI SPRKSCL1111 ao código de saída para que você saiba que a função CreateDecimalType não é compatível com o Snowpark.

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

Correção recomendada

Ainda não há uma correção recomendada.

Mensagem: A opção Spark Session builder não é suportada.

Categoria: Erro de conversão.

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.SparkSession. Builder.config, que está definindo uma opção da Spark Session e não é suportada pelo Snowpark.

Cenário

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.SparkSession.Builder.config usada para definir uma opção na Spark Session.

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

Saída

O SMA adiciona o EWI SPRKSCL1104 ao código de saída para que você saiba que o método de configuração não é compatível com o Snowpark. Então, não é possível definir opções na Spark Session por meio da função config e isso pode afetar a migração da instrução da Spark Session.

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

Correção recomendada

Para criar a sessão, é necessário adicionar a configuração adequada do Snowflake Snowpark.

Neste exemplo, é usada uma variável configs.

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

Também é recomendado o uso de um configFile (profile.properties) com as informações de conexão:

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

E com o Session.builder.configFile, a sessão pode ser criada:

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

Recomendações adicionais

SPRKSCL1101

Esse código de problema está obsoleto desde o Spark Conversion Core 2.3.22

Mensagem: Broadcast não é suportado

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.broadcast, que não é compatível com o Snowpark. Essa função não é suportada porque o Snowflake não suporta variáveis broadcast.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.broadcast usada para criar um objeto de broadcast a ser usado em cada cluster do Spark:

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

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

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

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

Saída

O SMA adiciona o EWI SPRKSCL1101 ao código de saída para que você saiba que essa função não é suportada no Snowpark.

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

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

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

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

Correção recomendada

Como o Snowflake gerencia o armazenamento e a carga de trabalho nos clusters, os objetos broadcast não são aplicáveis. Isso significa que o uso de broadcast pode não ser necessário, mas cada caso deve exigir uma análise mais detalhada.

A abordagem recomendada é substituir uma transmissão de dataframe do Spark por um dataframe regular do Snowpark ou usar um método de dataframe como Join.

Para a entrada proposta, a correção é adaptar a união para usar diretamente o dataframe collegeDF sem o uso de transmissão para o dataframe.

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

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

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

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

Recomendações adicionais

SPRKSCL1150

Mensagem: org.apache.spark.sql.functions.var_pop tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.var_pop, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.var_pop, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

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

Saída

O SMA adiciona o EWI SPRKSCL1150 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

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

Correção recomendada

O Snowpark tem uma função equivalente var_pop que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

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

Recomendações adicionais


descrição: >- O parâmetro da função org.apache.spark.sql.DataFrameReader.option não está definido.


SPRKSCL1164

Nota

Este código de problema está obsoleto

Mensagem: O parâmetro não está definido para org.apache.spark.sql.DataFrameReader.option

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta que o parâmetro de org.apache.spark.sql.DataFrameReader.option não está definido.

Cenário

Entrada

Abaixo está um exemplo de parâmetro indefinido para a função org.apache.spark.sql.DataFrameReader.option.

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

Saída

O SMA adiciona o EWI SPRKSCL1164 ao código de saída para que você saiba que o parâmetro fornecido para a função org.apache.spark.sql.DataFrameReader.option não está definido.

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

Correção recomendada

Verifique a documentação do Snowpark para a opção de formato de reader aqui, a fim de identificar as opções definidas.

Recomendações adicionais

SPRKSCL1135

Aviso

Esse código de problema está obsoleto desde o Spark Conversion Core 4.3.2

Mensagem: org.apache.spark.sql.functions.mean tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.mean, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.mean, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1135 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente mean que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1115

Aviso

Esse código de problema está obsoleto desde o Spark Conversion Core Version 4.6.0

Mensagem: org.apache.spark.sql.functions.round tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.round, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.round que gera esse EWI.

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

Saída

O SMA adiciona o EWI SPRKSCL1115 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente round que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um objeto de coluna e uma escala, você pode converter a escala em um objeto de coluna usando a função com.snowflake.snowpark.functions.lit como solução alternativa.

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

Recomendações adicionais

SPRKSCL1144

Mensagem: A tabela de símbolos não pôde ser carregada

Categoria: Erro de análise

Descrição

Esse problema aparece quando há um erro crítico no processo de execução do SMA. Como a tabela de símbolos não pode ser carregada, o SMA não pode iniciar o processo de avaliação ou conversão.

Recomendações adicionais

  • É improvável que isso seja um erro no próprio código-fonte, mas sim um erro na forma como o SMA processa o código-fonte. A melhor solução seria publicar um problema no SMA.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1170

Nota

Este código de problema está obsoleto

Mensagem: a chave do membro sparkConfig não é compatível com a chave específica da plataforma.

Categoria: Erro de conversão

Descrição

Se você estiver usando uma versão mais antiga, atualize para a mais recente.

Recomendações adicionais

  • Atualize seu aplicativo para a versão mais recente.

  • Para obter mais suporte, envie um e-mail para sma-support@snowflake.com ou publique um problema no SMA.

SPRKSCL1121

Mensagem: org.apache.spark.sql.functions.atan tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.atan, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.atan, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1121 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente atan que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1131

Mensagem: org.apache.spark.sql.functions.grouping tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.grouping, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.grouping, usada primeiro com um nome de coluna como argumento e depois com um objeto de coluna.

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

Saída

O SMA adiciona o EWI SPRKSCL1131 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente grouping que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1160

Nota

Esse código de problema está obsoleto desde o Spark Conversion Core 4.1.0

Mensagem: org.apache.spark.sql.functions.sum tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.sum, que tem uma solução alternativa.

Cenário

Entrada

Veja a seguir um exemplo da função org.apache.spark.sql.functions.sum que gera esse EWI. Neste exemplo, a função sum é usada para calcular a soma da coluna selecionada.

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

Saída

O SMA adiciona o EWI SPRKSCL1160 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

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

Correção recomendada

O Snowpark tem uma função equivalente sum que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

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

Recomendações adicionais

SPRKSCL1154

Mensagem: org.apache.spark.sql.functions.ceil tem uma solução alternativa, consulte a documentação para obter mais informações

Categoria: Aviso

Descrição

Esse problema aparece quando o SMA detecta o uso da função org.apache.spark.sql.functions.ceil, que tem uma solução alternativa.

Cenário

Entrada

Abaixo está um exemplo da função org.apache.spark.sql.functions.ceil, usada primeiro com um nome de coluna como argumento, depois com um objeto de coluna e, por fim, com um objeto de coluna e uma escala.

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
val result1 = df.withColumn("ceil", ceil("value"))
val result2 = df.withColumn("ceil", ceil(col("value")))
val result3 = df.withColumn("ceil", ceil(col("value"), lit(1)))
Copy

Saída

O SMA adiciona o EWI SPRKSCL1154 ao código de saída para que você saiba que essa função não é totalmente compatível com o Snowpark, mas que há uma solução alternativa.

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result1 = df.withColumn("ceil", ceil("value"))
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result2 = df.withColumn("ceil", ceil(col("value")))
/*EWI: SPRKSCL1154 => org.apache.spark.sql.functions.ceil has a workaround, see documentation for more info*/
val result3 = df.withColumn("ceil", ceil(col("value"), lit(1)))
Copy

Correção recomendada

O Snowpark tem uma função equivalente ceil que recebe um objeto de coluna como argumento. Por esse motivo, a sobrecarga do Spark que recebe um objeto de coluna como argumento é diretamente suportada pelo Snowpark e não exige nenhuma alteração.

Para a sobrecarga que recebe um argumento de cadeia de caracteres, você pode converter a cadeia de caracteres em um objeto de coluna usando a função com.snowflake.snowpark.functions.col como solução alternativa.

Para a sobrecarga que recebe um objeto de coluna e uma escala, você pode usar a função callBuiltin para invocar a função interna do Snowflake CEIL. Para usá-lo, você deve passar a cadeia de caracteres «ceil» como o primeiro argumento, a coluna como o segundo argumento e a escala como o terceiro argumento.

val df = Seq(2.33, 3.88, 4.11, 5.99).toDF("value")
val result1 = df.withColumn("ceil", ceil(col("value")))
val result2 = df.withColumn("ceil", ceil(col("value")))
val result3 = df.withColumn("ceil", callBuiltin("ceil", col("value"), lit(1)))
Copy

Recomendações adicionais

SPRKSCL1105

Este código de problema está obsoleto

Mensagem: O valor do formato do writer não é suportado.

Categoria: Erro de conversão

Descrição

Esse problema aparece quando o comando org.apache.spark.sql.DataFrameWriter.format tem um argumento que não é suportado pelo Snowpark.

Cenários

Há alguns cenários, dependendo do tipo de formato que você está tentando salvar. Pode ser um formato suportado ou não suportado.

Cenário 1

Entrada

A ferramenta analisa o tipo de formato que está tentando salvar; os formatos compatíveis são:

  • csv

  • json

  • orc

  • parquet

  • texto

    dfWrite.write.format("csv").save(path)
Copy

Saída

A ferramenta transforma o método format em uma chamada de método csv quando a função save tem um parâmetro.

    dfWrite.write.csv(path)
Copy

Correção recomendada

Nesse caso, a ferramenta não mostra o EWI, o que significa que não há necessidade de correção.

Cenário 2

Entrada

O exemplo abaixo mostra como a ferramenta transforma o método format ao passar um valor net.snowflake.spark.snowflake.

dfWrite.write.format("net.snowflake.spark.snowflake").save(path)
Copy

Saída

A ferramenta mostra o EWI SPRKSCL1105 indicando que o valor net.snowflake.spark.snowflake não é suportado.

/*EWI: SPRKSCL1105 => Writer format value is not supported .format("net.snowflake.spark.snowflake")*/
dfWrite.write.format("net.snowflake.spark.snowflake").save(path)
Copy

Correção recomendada

Para os cenários não suportados não há nenhuma correção específica, pois depende dos arquivos que estão tentando ser lidos.

Cenário 3

Entrada

O exemplo abaixo mostra como a ferramenta transforma o método format ao passar um csv, mas usando uma variável.

val myFormat = "csv"
dfWrite.write.format(myFormat).save(path)
Copy

Saída

Como a ferramenta não consegue determinar o valor da variável em tempo de execução, mostra o EWI SPRKSCL1163 indicando que o valor não é suportado.

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

Correção recomendada

Como solução alternativa, você pode verificar o valor da variável e adicioná-lo como uma cadeia de caracteres à chamada format.

Recomendações adicionais